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