如何排查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过高问题结束了,谢谢大家批评指针!

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM