生产环境出现大量空闲线程排查
2017-12-27 本文已影响0人
blueSkyBird
通过JVM堆栈出现大量WAITING线程的原因。
-
使用ps -ef|grep tomcat8080 找到运行项目的进程id
-
使用jstack命令把该进程的堆栈导进一个文件
-
使用
grep java.lang.Thread.State dump | awk '{print $2$3$4$5}' | sort | uniq -c
命令查看线程状态分类
-
根据WAITING状态去查找,找到
image.png
最后排查到两个问题。
- 每个模块都自己新建自己的线程池,线程池创建不合理,导致空闲线程比较多
- 在代码中使用ExecutorService提交线程任务后,未关闭。
总结:
- 线程池这种底层资源的提供,没有特殊情况下应该统一提供。而不是每个模块都自己来新建个线程池。
- 需要合理配置线程池。
- 创建线程池或者新启动线程时,最好给线程起个名字,这样出现问题好定位
配置线程池的策略: