keepAliveTimeout=“30000”
maxKeepAliveRequests=“8000”
maxHttpHeaderSize=“8192”
URIEncoding=“UTF-8”
enableLookups=“false”
acceptCount=“1000”
disableUploadTimeout=“true”
redirectPort=“8443” />
事后thread dump看其实真正处于RUNNABLE状态的线程很少,绝大部分线程都处于TIMED_WAITING状态:
于是大伙都开始纠结为什么线程会涨到3000,而且发现即使峰值过了线程数并不会降下来。
我们首先想到的是:后端应用的处理瞬间比较慢,“堵住了”导致前端线程数涨了起来。但是优化一个版本上线后发现虽然涨的情况有所好转,但是最终线程池还是会达到3000这个最大值。
==分割线=========
以上是大背景,中间的过程省略,直接跟各位说下目前我得到的结论:
1、首先是为什么线程不释放的问题?
简单说下我验证的Tomcat(7.0.54)线程池大概的工作机制
Tomcat启动时如果没有请求过来,那么线程数&#x