Java之Tomcat公共配置参考说明
1. Tomcat 主要配置说明:
属性名 | 说明 | 默认值 | 参考值 |
minSpareThreads | 最小空闲线程数 | 10 | 100 |
maxThreads | 最大线程数 | 200 | 1000 |
acceptCount | HTTP请求数达到最大线程数后,新请求被放入等待队列,该值为等待队列的最大等待数,队列一旦满了,后续请求会被tomcat拒绝SocketException: Connection refused | 100 | 1000 |
maxConnections | 某一时刻,能够接受的最大连接数, maxConnections满了之后一样是将新请求被放入等待队列, 不超过acceptCount | 10000 | 10000 |
maxHttpPostSize | 请求体最大长度kb | 2097152 | 视情况 |
maxHttpHeaderSize | 请求头最大长度kb | 0 | 视情况 |
MaxThreads取值可以按比例推算
1c2g 200
2c4g 400
4c8g 800
这里取整1000
2. maxThreads,acceptCount,maxConnections三者的关系
- 参数maxThreads是指线程池里最大的活跃线程数
- 参数maxConnections是最大的tcp连接数,而不是最大的Http请求数,通常一个tcp连接可以处理多个http请求
- 所以,无论maxThreads和maxConnections谁达到了最大值,Tomcat Server都会将后续的Http请求放入队列中,一旦队列满了,后续Http请求会被tomcat拒绝, 从而抛出SocketException: Connection refused异常
- 按照多路复用模型,一个TCP连接的已连接、可读、可写事件都会交由线程池去分配和处理
- 所以,所谓达到了maxThreads和maxConnections这两个阈值,只是一个当前值(瞬时值)
- 线程池的忙闲程度(吞吐量)取决于可读可写操作的耗时(还包括错误率,断连等)
- 所以,maxThreads>=maxConnections=资源浪费,maxConnections/maxThreads>10=担心它可能处理不过来,需要设置稍大的maxThreads
- 系统吞吐量的3个指标 rt, cc, qps都达标的情况下,就不需要设置较大的maxThreads,这需要反复压测得出结论
- 线程池吞吐量上不去,acceptCount设的再大也无济于事,当然应用服务内存足够大,acceptCount设的大也无妨,但是http客户端一旦超时一样会断开
- http1.1协议默认都是tcp复用的,一旦超时就会主动断开连接再次重建影响性能,通常浏览器会在一个域名下会建立多个tcp连接提供并发性能