SpringBoot內嵌Tomcat容器,許多配置變得不透明,spring-configuration-metadata.json文件中設置了Tomcat的許多默認配置
我們可以在線上的外掛配置文件中修改tomcat的配置,常用配置有:
## 等待隊列長度,默認100。
server.tomcat.accept-count=1000
## 最大工作線程數,默認200。(4核8g內存,線程數經驗值800,操作系統做線程之間的切換調度是有系統開銷的,所以不是越多越好。)
server.tomcat.max-threads=800
## 最小工作空閒線程數,默認10。(適當增大一些,以便應對突然增長的訪問量)
server.tomcat.min-spare-threads=100
上線前一定要檢查配置,測試並調優,再發生產。
spring-configuration-metadata.json中沒有的屬性,可以定製化內嵌Tomcat的方式修改。例如通過WebServerFactoryCustomizer<ConfigurableWebServerFactory>,修改長鏈接keepAlive相關配置,保證路由策略的性能高效。
/**
* 當Spring容器內沒有TomcatEmbeddedServletContainerFactory這個bean時,會把此bean加載金spring容器中
*/
@Component
public class WebServerConfiguration implements WebServerFactoryCustomizer<ConfigurableWebServerFactory>{
@Override
public void customize(ConfigurableWebServerFactory factory) {
// 使用對應工廠類提供給我們的接口定製化我們的tomcat connector
((TomcatServletWebServerFactory) factory).addConnectorCustomizers(new TomcatConnectorCustomizer() {
@Override
public void customize(Connector connector) {
Http11AprProtocol protocol = (Http11AprProtocol) connector.getProtocolHandler();
// 定製化keepAliveTimeout,設置30秒內沒有請求則服務端自動斷開keepalive鏈接
protocol.setKeepAliveTimeout(300000);
// 當客戶端發送超過10000個請求則自動斷開keepalive鏈接
protocol.setMaxKeepAliveRequests(10000);
}
});
}
}