生产环境出现大量空闲线程排查

通过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
image.png

最后排查到两个问题。

  1. 每个模块都自己新建自己的线程池,线程池创建不合理,导致空闲线程比较多
  2. 在代码中使用ExecutorService提交线程任务后,未关闭。

总结:

  1. 线程池这种底层资源的提供,没有特殊情况下应该统一提供。而不是每个模块都自己来新建个线程池。
  2. 需要合理配置线程池。
  3. 创建线程池或者新启动线程时,最好给线程起个名字,这样出现问题好定位

配置线程池的策略:

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容