使用jstack(jstack是用于调试线程间的关系,解决阻塞,锁等问题)定位由死循环引起的cpu负载飙高或者死锁

在linux下:

linux的top命令可以查看进程的pid,我们找到java程序的pid,
然后执行 top -Hp pid 就可以查看到这个进程下线程的运行情况。 

这样粗略可以看到哪些线程比较繁忙,这时候就用到jdk自带的小工具jstack(官方文档或者自行 百度)。

我们执行jstack pid > abc.txt    //意思是执行结果输出到这个文本。

在这个文本中有很多的就是当前线程的执行情况。

文本中的线程pid是十六进制的,top出来的是十进制,所以十进制转十六进制命令:printf "%x" 十进制的线程id

 

jstack还有很多其他的参数,感兴趣的可以自己看一下官方文档。

刚才输出的abc.txt里面就是我们线程执行的情况,那么可以这么排查定位:

当你top -Hp pid 可以查看到cpu占用高的线程,然后把这个线程pid转换为十六进制,打开abc.txt文件,搜索这个十六进制数,搜出来的结果就是要重点排查的!

 

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页