java 项目cpu飙升故障排查

cpu飙升居高不下,这种事情虽然很少,可能在一家公司待一年也不会发生一次。

但是这种故障一旦发生了,可能就很严重。

那么当我们某个Java项目占比很高了,怎么定位到代码?

一、top

看一下大概情况,看看谁占的最高,会显示每个进程和具体的cpu占比,我这里显示的是正常情况,特殊情况下,cpu可能飙升到100%,200%

如果你想知道这个进程对应的应用信息,可以

ps -17464

这个命令可以显示进程对应的服务名,jar包,路径,还有内存配置等信息。

二、假如现在上面pid为17464的进程占的很高,达到了200%了。这时候,我们要看一下这个进程的线程情况。因为进程cpu过高,还是因为它里面的线程cpu过高。这里面可能是由一个线程导致,也有可能由多个线程共同导致的。比如说,一个进程总的cpu达到200%了,可能是由三个子线程分别占用60%多的比例。

top -p 17464 -H

-H表示看线程信息,注意这里虽然列名还是"pid",但实际上已经是表示线程的id,就是17464这个进程下所有的线程信息,cpu占比也在其列。

 

z

三、假如就是上面17614的线程占用了绝大部分cpu,虽然实际上可能有多个线程同时是高占用内存,我们这里假设就它一个。找到这个线程之后,就是要看它的堆栈信息,这是寻找问题根源的关键。

首先将转换成线程id转成16进制,得到44ce

[root@VM-0-15-centos ~]# printf "%x\n" 17614
44ce

四、查看该进程下该线程的堆栈信息。

1、先将堆栈信息写入到文件中

jstack 17464> thread_stack.log

2、然后在文件中查找根据线程0x44ce去找日志就可以了

备注:一般情况我们会执行jstack 17464 | grep 44ce去查看堆栈信息,但是有时候会报错,提示:

18626: Unable to open socket file: target process not responding or HotSpot VM not loaded

具体原因后面再看

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xinqing5130

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值