Java服务,CPU100%问题如何快速定位?

简要步骤如下:

(1)找到最耗 CPU 的进程;

(2)找到最耗 CPU 的线程;

(3)查看堆栈,定位线程在干嘛,定位对应代码;

找出消耗最快CPU进程

使用方式: top -c
方法:
执行 top -c ,显示进程运行信息列表
键入 P (大写 p),进程按照 CPU 使用率排序
图示:
在这里插入图片描述
如上图,最耗 CPU 的进程 PID 为 10765。

步骤二:找到最耗 CPU 的线程

工具:top -Hp 进程
方法:
top -Hp 10765 ,显示一个进程的线程运行信息列表
在这里插入图片描述
如上图,进程 10765 内,最耗 CPU 的线程 PID 为 10804。

步骤三:查看堆栈,定位线程在干嘛,定位对应代码

首先,将线程 PID 转化为 16 进制。
工具 printf “%x\n” 线程号
printf “%x\n” 10804

步骤4 看这个线程在干嘛

工具 jstack
jstack 进程号 | grep ‘16进制线程id’ -C5 --color
jstack 10765 | grep ‘0x2a34’ -C5 --color
打印进程堆栈
通过线程 id,过滤得到线程堆栈
图示:
在这里插入图片描述
如上图,找到了耗 CPU 高的线程对应的线程名称 “AsyncLogger-1”,以及看到了该线程正在执行代码的堆栈。
最后,根据堆栈里的信息,找到对应的代码,搞定!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值