Springboot内置Tomcat配置调优实战
Tomcat的 maxConnections、maxThreads、acceptCount 三大配置,分别表示最大连接数,最大线程数、最大的等待数,可以通过application.yml配置文件来改变这个三个值.
# tomcat 8
# tomcat 9
1、accept-count:最大等待数
官方文档:当所有的请求处理线程都在使用时,所能接收的连接请求的队列的最大长度。当队列 已满时 ,任何的连接请求都将 被拒绝 。accept-count的默认值为100。
详细的来说:当调用HTTP请求数达到tomcat的最大线程数时,还有新的HTTP请求到来,这时tomcat会将该请求放在等待队列中,这个acceptCount就是指能够接受的最大等待数,默认100。如果等待队列也被放满了,这个时候再来新的请求就会被tomcat拒绝(connection refused)。
2、maxThreads:最大线程数
每一次HTTP请求到达Web服务,tomcat都会创建一个线程来处理该请求,那么最大线程数 决定了Web服务容器可以同时处理多少个请求 。maxThreads默认200,肯定建议增加。但是,增加线程是有成本的,更多的线程,不仅仅会带来更多的线程上下文切换的成本,而且意味着带来更多的内存消耗。JVM中默认情况下在创建新线程时会分配大小为1M的线程栈,所以,更多的线程异味着需要更多的内存。
线程数的经验值为 :1核2g内存为200,线程数经验值200;4核8g内存,线程数经验值800。
3、maxConnections:最大连接数
官方文档:
这个参数是指在同一时间, tomcat能够接受的最大连接数 。对于Java的阻塞式BIO,默认值是maxthreads的值;如果在BIO模式使用定制的Executor执行器,默认值将是执行器中maxthreads的值。对于Java 新的NIO模式,maxConnections 默认值是10000。
对于windows上APR/native IO模式,maxConnections默认值为8192,这是出于性能原因,如果配置的值不是1024的倍数,maxConnections 的实际值将减少到1024的最大倍数。
如果设置为-1,则禁用maxconnections功能,表示不限制tomcat容器的连接数。
maxConnections和accept-count的关系为:当连接数达到最大值maxConnections后,系统 会继续接收连接 ,但 不会超过acceptCount的值 。