jstack定位线上问题

jstack定位问题


出现死循环后,我们可以使用jstack命令来定位问题。

1. 查找JVM进程ID(pid=23199

1
`ps -ef | grep java`

img.png

2. 查找发生死循环的线程ID(threadId=23214),CPU利用率暴表的第一条记录就是了。将十进制23214转为十六进制5aae

1
`top -H -p 23199`

img_1.png

3. 使用jstack导出线程dump信息。

1
`jstack -l 23199 > ~/threaddump.txt`

4. 分析dump数据,查找CPU最高的线程的运行堆栈。可以看出,死循环发生在HashMapput()方法。

1
`cat threaddump.txt | grep -A10 5aae`

img_2.png

附:查看线程ID方法windows工具下载地址

最后在Windows下揪出Java程序占用CPU很高的线程并找到问题代码,死循环线程代码

作者

神奇宝贝大师

发布于

2018-10-03

更新于

2018-12-10

许可协议

评论