Linux 排查java进程cpu过高

第一步:通过top -c 命令查看系统进程资源占用情况,同时关注下图中%cpu这一列指标的情况
Linux 排查java进程cpu过高_第1张图片
2.第二步:通过下图我们可以得出结论进程号(PID)为18407的进程cpu占用100.3%,这个就是我们要重点排查的对象
Linux 排查java进程cpu过高_第2张图片
3.第三步:使用top -Hp 进程号 用来排查进程中线程cpu占用的情况,这里按照上面查到进程号为18407执行top -Hp 18407排查到线程cpu占用的情况如下,从图中我们知道占用cpu过高的线程号为18540
Linux 排查java进程cpu过高_第3张图片
第四步:通过jstack 进程号 |grep -C 20 线程号(注意这里的线程号需要转换成16进制),我们这里要查看18540线程的堆栈信息,需要将18540转换成16进制为0x486c(可以通过在linux系统执行printf %x 18540 来得到16进制值),
那么完整的命令为jstack 18407 |grep -C 20 ‘nid=0x486c’ 展示的内容如下图所示

Linux 排查java进程cpu过高_第4张图片
第五步:然后查看我们的代码,如下图所示,是ArthasController类中的第17行有一个死循环导致了cpu占用过高,至此java排查cpu过高问题结束
Linux 排查java进程cpu过高_第5张图片

你可能感兴趣的:(java,linux,jvm)