通過Tomcat配置改善SpringBoot項目併發線程數上不去的問題

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);
            }
        });
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章