听说你的应用线程数占用偏高了?

90 阅读1分钟

线程过多问题排查

应用水位图

image.png

  • 观察了应用日志,目前未影响业务处理
  • 水位图也比较安全 (线程创建&内存占用表象正常)
    影响线程创建数量的因素(1. JVM内存大小,2. 系统限制,3. 栈大小) image.png

排查过程

工具

image.png

等待锁释放的代码块

image.png

应用代码分析

使用场景:上传云存储相关位置逻辑排查&定时任务相关(因为使用了elasticjob,目前策略是任务固定分给线上的某一个节点执行,观察了线上两台机器的线程占用情况,仅有一台存在问题,确定和定时任务的逻辑存在关联)

  1. 对账单文件对比任务(历史代码)
  2. 检查活动奖励名单数据(近期代码)

最终定位是由于2中调用了云文件是否存在的工具类,其中中间件源码存在Bug;这个位置捕获上抛会导致刚刚new的对象中的守护线程没有被释放掉~

image.png

参考

java - why IdleConnectionMonitorThread need to synchronize - Stack Overflow