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很高的线程并找到问题代码,死循环线程代码