通过Tomcat配置改善SpringBoot项目并发线程数上不去的问题
并发容量问题:server端并发线程数上不去SpringBoot内嵌tomcat容器,许多配置变得不透明,需要到spring-configuration-metadata.json文件查看各节点的配置。上线前一定要检查配置,保证最优,再发生产。4核8g内存,线程数经验值800,操作系统做线程之间的切换调度是有系统开销的,所以不是越多越好。server.tomcat.accept-count...
·
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);
}
});
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)