tomcat官网
https://tomcat.apache.org/tomcat-8.5-doc/config/http.html
HTTP连接器,组件的特定实例侦听服务器上特定TCP端口号上的连接。
每个传入请求在该请求期间都需要一个线程。如果接收到的并发请求多于当前可用的请求处理线程可以处理的请求,则将创建其他线程,直到达到配置的最大值(maxThreads属性的值)。如果收到更多并发请求,它们将堆叠在由Connector创建的服务器套接字内,最多为配置的最大值(acceptCount 属性值)。任何进一步的同时请求将收到“连接被拒绝”错误,直到资源可用于处理它们。
1.springboot1.3.5使用tomcat NIO,其他版本可以查看代码
org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory 103行
public static final String DEFAULT_PROTOCOL = "org.apache.coyote.http11.Http11NioProtocol";
2.springboot1.3.5的最大连接数是10000,其他版本可以查看代码
org.apache.tomcat.util.net.AbstractEndpoint 239行
private int maxConnections = 10000;
maxConnections
服务器在任何给定时间接受和处理的最大连接数。达到此数量后,服务器将接受但不处理另一个连接。此附加连接将被阻止,直到正在处理的连接数低于maxConnections,此时服务器将再次开始接受和处理新连接。请注意,一旦达到限制,操作系统仍可以根据acceptCount设置接受连接。默认值因连接器类型而异。对于NIO和NIO2,默认值为10000。对于APR / native,默认为8192。
请注意,对于Windows上的APR / native,配置的值将减小到1024的最大倍数,小于或等于maxConnections。这是出于性能原因而完成的。
如果设置为值-1,则禁用maxConnections功能并且不计算连接。
3.springboot1.3.5的最大线程数和最小线程数是200和10,其他版本可以查看代码
org.apache.tomcat.util.net.AbstractEndpoint<S> 373行 392行
private int maxThreads = 200;
private int minSpareThreads = 10;
maxThreads
此Connector要创建的最大请求处理线程数,因此确定可以处理的最大并发请求数。如果未指定,则此属性设置为200.如果执行程序与此连接器关联,则忽略此属性,因为连接器将使用执行程序而不是内部线程池执行任务。请注意,如果配置了执行程序,则会正确记录为此属性设置的任何值,但会报告(例如,通过JMX) -1以明确表示未使用该值。
minSpareThreads
最小线程数始终保持运行。这包括活动和空闲线程。如果未指定,10 则使用默认值。如果执行程序与此连接器关联,则忽略此属性,因为连接器将使用执行程序而不是内部线程池执行任务。请注意,如果配置了执行程序,则会正确记录为此属性设置的任何值,但会报告(例如,通过JMX)-1以明确表示未使用该值。
4.优化最大线程数
server:
port: 8009
tomcat:
max-threads: 1000