Tomcat日志中线程池问题通常与配置不当或资源不足相关,可按以下步骤解决:
分析日志定位问题
查看日志中线程池相关错误(如线程耗尽、队列满、拒绝策略触发等),判断是配置问题还是资源瓶颈。
优化线程池参数
maxThreads:根据CPU核心数和负载设置(CPU密集型设为核数1-2倍,IO密集型设为2-4倍)。minSpareThreads:保持少量空闲线程(建议等于CPU核心数),避免频繁创建线程。acceptCount:设置为maxThreads的1-2倍,控制等待队列长度,避免连接被过早拒绝。LinkedBlockingQueue(有界队列)控制内存,或ArrayBlockingQueue(无界队列)应对突发流量。CallerRunsPolicy(让调用者处理任务),避免任务丢失。升级连接器与协议
protocol="org.apache.coyote.http11.Http11Nio2Protocol"),提升高并发性能。protocol="org.apache.coyote.http11.Http11NioProtocol"并配置http2="true"),减少连接开销。监控与调优
排查代码与资源问题
配置示例(conf/server.xml):
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="200" minSpareThreads="25" maxQueueSize="100"
keepAliveTime="60" rejectedExecutionHandler="org.apache.tomcat.util.threads.ThreadPoolExecutor$CallerRunsPolicy"/>
<Connector executor="tomcatThreadPool" port="8080" protocol="org.apache.coyote.http11.Http11Nio2Protocol"/>
参考来源: