CPU 100%问题排查

1、top -c

top -c 命令找出当前进程的运行列表

按一下 P 可以按照CPU使用率进行排序

显示Java进程 PID 为 2609 的java进程消耗最高

 

2、top -Hp pid

然后我们需要根据PID 查出CPU里面消耗最高的进程

使用命令 top -Hp 2609 找出这个进程下面的线程,继续按P排序

可以看到 2854 CPU消耗最高

 

3、printf '%x\n' pid

转换为十六进制

 

4、jstack pid |grep 'nid' -C5 –color

接着直接在 jstack 中找到相应的堆栈信息jstack pid |grep 'nid' -C5 –color

或者

接下来就需要导出我们的进程快照了,看看这个线程做了啥

jstack -l 2609 > ./2609.stack

再用grep查看一下线程在文件里做了啥

cat 2609.stack |grep 'b26' -C 8

 

当然更常见的是我们对整个 jstack 文件进行分析,通常我们会比较关注 WAITING 和 TIMED_WAITING 的部分,BLOCKED 就不用说了。我们可以使用命令cat jstack.log | grep "java.lang.Thread.State" | sort -nr | uniq -c来对 jstack 的状态有一个整体的把握,如果 WAITING 之类的特别多,那么多半是有问题啦。

image

 

 

频繁gc

当然我们还是会使用jstack来分析问题,但有时候我们可以先确定下gc是不是太频繁,使用jstat -gc pid 1000命令来对gc分代变化情况进行观察,1000表示采样间隔(ms),S0C/S1C、S0U/S1U、EC/EU、OC/OU、MC/MU分别代表两个Survivor区、Eden区、老年代、元数据区的容量和使用量。YGC/YGT、FGC/FGCT、GCT则代表YoungGc、FullGc的耗时和次数以及总耗时。如果看到gc比较频繁,再针对gc方面做进一步分析。

 

 

https://www.mdeditor.tw/pl/2D3u

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值