SpringBoot内嵌tomcat调优

参考:
https://www.baeldung.com/spring-boot-configure-tomcat
https://howtodoinjava.com/spring-boot2/embedded-tomcat-configuration/
gtihub - Unable to configure maxIdleTime for Tomcat server worker threads(maxIdleTime = hardcode 60s)
https://tomcat.apache.org/tomcat-9.0-doc/config/executor.html#Standard_Implementation

Springboot Tomcat默认配置

可通过org.springframework.boot.autoconfigure.web.ServerProperties查看,其中包括属性tomcat、jetty、undertow三种服务器的设置,默认启用tomcat。

# tomcat 8
server:
  tomcat:
    accept-count: 100 # 最大连接等待数,默认100 
    max-connections: 10000 #最大连接数,默认为10000 
    max-threads: 200  #最大工作线程数,默认200
    min-spare-threads: 10 #最小工作线程数,默认10
# tomcat 9
server:
  tomcat:
    max-connections: 8192
    accept-count: 100
    threads:
      max: 200
      min-spare: 10

最大连接数=max-connections + accept-count
最大并发数=max-threads
注:
maxIdleTime=60s # 线程空闲时间(springboot暂未提供该配置,在tomcat中硬编码60s,原生tomcat9提供配置maxIdleTime)

关于max-connections, accept-count, max-threads三者关系可参考:
秒懂:tomcat的maxConnections、maxThreads、acceptCount 图解

Tomcat经验值

max-threads线程数的经验值为:
1核2g内存,线程数经验值200;
4核8g内存,线程数经验值800。

4核8g内存,建议值:

server:
  tomcat:
    accept-count: 1000
    max-connections: 10000 
    max-threads: 800 
    min-spare-threads: 100

自定义Springboot Tomcat配置

示例代码中均为get方法,可调整为set方法进行配置设置

import org.apache.coyote.http11.AbstractHttp11Protocol;
import org.apache.coyote.http11.Http11NioProtocol;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TomcatCustomizer implements WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

  private static final Logger logger = LogManager.getLogger(TomcatCustomizer.class);

  @Override
  public void customize(TomcatServletWebServerFactory factory) {
    factory.addConnectorCustomizers(connector -> {
      //AbstractHttp11Protocol protocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
      Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();

      logger.info("####################################################################################");
      logger.info("#");
      logger.info("# TomcatCustomizer");
      logger.info("#");

      logger.info("# MaxConnections {}", protocol.getMaxConnections());
      logger.info("# AcceptorThreadCount {}", protocol.getAcceptorThreadCount());
      logger.info("# AcceptCount {}", protocol.getAcceptCount());

      logger.info("#");
      logger.info("# MaxThread {}", protocol.getMaxThreads());
      logger.info("# MinSpareThreads {}", protocol.getMinSpareThreads());
      logger.info("#");

      logger.info("# ConnectionTimeout {}", protocol.getConnectionTimeout());
      logger.info("# KeepAliveTimeout {}", protocol.getKeepAliveTimeout());
      logger.info("# MaxKeepAliveRequests {}", protocol.getMaxKeepAliveRequests());
      logger.info("#");

      logger.info("####################################################################################");

    });
  }
}

运行结果:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

罗小爬EX

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值