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目录下使用。


更多可以关注

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值