jstack定位线上问题
jstack定位问题
出现死循环后,我们可以使用jstack
命令来定位问题。
1. 查找JVM进程ID(pid=23199
)
1 | `ps -ef | grep java` |
2. 查找发生死循环的线程ID(threadId=23214
),CPU利用率暴表的第一条记录就是了。将十进制23214
转为十六进制5aae
。
1 | `top -H -p 23199` |
3. 使用jstack
导出线程dump信息。
1 | `jstack -l 23199 > ~/threaddump.txt` |
4. 分析dump数据,查找CPU最高的线程的运行堆栈。可以看出,死循环发生在HashMap
的put()
方法。
1 | `cat threaddump.txt | grep -A10 5aae` |
最后在Windows下揪出Java程序占用CPU很高的线程并找到问题代码,死循环线程代码