使用jstack排查CPU飙升的问题记录

        最近,看到短视频传播了一个使用jstack来协助排查CPU飙升的案例。我也是比较感兴趣,参考了视频博主的流程,自己做了下对应案例的实战演练,在此,想做一下,针对相关问题模拟与排查演练的实战过程记录。

        案例中所使用的DEMO代码,我已经放到了以下的代码仓库中,有需要的同学,可以自行下载与学习演练。代码仓库地址:https://github.com/AlickLiubc/cpu-problems-demo

        在演练代码中,主要通过一段死循环,来模拟了系统CPU飙升的代码原因。

具体步骤:

步骤1:

将代码打成jar包并放置在Linux的系统运行环境中运行:

mvn clean package -DskipTests
nohup java -jar cpu-problems-demo-1.0-SNAPSHOT.jar > /dev/null 2> /dev/null &

步骤2:

通过浏览器打开与观察接口的问题现象,如下图所示,浏览器处于不断加载的过程中:

步骤3:

使用top命令,查看占用CPU比较高的进程ID(十进制),可以看到PID=16013的进程占用CPU很高。

top

步骤4:

进一步使用top命令查询占用CPU比较高的线程ID

top -H -p 16013

此时,可以得到占用CPU很高的线程ID(十进制),PID=16029。

步骤5:

将步骤4中得到的十进制的线程ID转换为十六进制值为0x3e9d:

printf "0x%x\n" 16029

步骤6:

结合以上步骤中得到的进程ID(十进制)与线程ID(十六进制),可以找到问题源头的相关代码信息:

jstack 16013 | grep 0x3e9d-A 20

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值