Java应用线上CPU飙高


  说明:曾经遇到过的一个线上实际问题,Demo是经过加工刻意重现,线上调试问题已经开发和运维人员的基本技能,在此备忘记录。


1、找出CPU占用较高的PID


  通过top命令,查找出占用CPU较高的PID:3639

pid.png


2、找出PID对应的TID


  命令:ps -mp 3639 -o THREAD,tid,time | sort –rn 这里可以看出查到的TID对应的是3673

tid.png


3、将TID转成16进制


  命令:printf "%x\n" 3673 转成十六进制为e59


4、通过jstack命令查出该线程栈信息


  命令:jstack 3546|grep e59 -A 100 前面数字是PID,后面红色数据是十六进制的TID。这里也可以通过jstack pid >/home/stack.log导出日志。

stack.png

  可以看上面蓝色部分很清晰的标出了可能有问题的代码位置,可以对比源码,我在20行的位置上面用个死循环导致的。
res.png

  提示:若不能及时定位问题,可以通过jmap将JVM的dump日志导出,线下分析用。若jstack、jmap不能使用,可以配置一下环境变量或者切到jre的bin目录下使用。


更多可以关注
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容