如何排查java进程cpu过高

第一步:通过top -c 命令查看系统进程资源占用情况,同时关注下图中%cpu这一列指标的情况

 

2.第二步:通过下图我们可以得出结论进程号(PID)为18407的进程cpu占用100.3%,这个就是我们要重点排查的对象

 

 第三步:使用top -Hp 进程号 用来排查进程中线程cpu占用的情况,这里按照上面查到进程号为18407执行top -Hp 18407排查到线程cpu占用的情况如下,从图中我们知道占用cpu过高的线程号为18540

 

第四步:通过jstack 进程号 |grep -C 20 线程号(注意这里的线程号需要转换成16进制),我们这里要查看18540线程的堆栈信息,需要将18540转换成16进制为0x486c(可以通过在linux系统执行printf %x 18540 来得到16进制值),

那么完整的命令为jstack 18407 |grep -C 20 'nid=0x486c' 展示的内容如下图所示

 

 第五步:然后查看我们的代码,如下图所示,是ArthasController类中的第17行有一个死循环导致了cpu占用过高,至此java排查cpu过高问题结束了,谢谢大家批评指针!

 

posted @ 2022-02-09 21:25  南阳客  阅读(2082)  评论(0编辑  收藏  举报