线程过多问题排查
应用水位图
- 观察了应用日志,目前未影响业务处理
- 水位图也比较安全 (线程创建&内存占用表象正常)
影响线程创建数量的因素(1. JVM内存大小,2. 系统限制,3. 栈大小)
排查过程
工具
- 在线线程使用情况分析工具
- jps&jstack pid > tmp.txt&Arthas
等待锁释放的代码块
应用代码分析
使用场景:上传云存储相关位置逻辑排查&定时任务相关(因为使用了elasticjob,目前策略是任务固定分给线上的某一个节点执行,观察了线上两台机器的线程占用情况,仅有一台存在问题,确定和定时任务的逻辑存在关联)
- 对账单文件对比任务(历史代码)
- 检查活动奖励名单数据(近期代码)
最终定位是由于2中调用了云文件是否存在的工具类,其中中间件源码存在Bug;这个位置捕获上抛会导致刚刚new的对象中的守护线程没有被释放掉~
参考
java - why IdleConnectionMonitorThread need to synchronize - Stack Overflow