通过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,修改长链接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);
            }
        });
    }
}

你可能感兴趣的:(SpringBoot)