Java 现场排查CPU飙升占用过高的方法

linux 环境下,使用top -c 命令,查看服务器上各进程的CPU使用情况。
b + x,然后就能把所关注的列和运行的行给高亮了。如我第一张截图。在记下CPU占用率高的pid之后,按键q退出top命令,
然后再top -Hp pid,我这就是  top -Hp 426476 查看单个进程里面是哪些线程在实际消耗CPU。


选择占比较大的几个线程id,使用命令 printf "%x\n" 54956  把进程id给转成16进制
使用jstack命令查看栈信息,具体:jstack 53514 | grep '0xd6ac' -A10        -A10 就是过滤到关键词之后(A:after)10行信息,不够可以自己再加。
最后分析,看看有没有熟悉的单词,推断都是什么逻辑在实际运行,抢占CPU

本来想以es进程为例,看看es进程里面这个线程在干吗呢,还不让看,执行失败了。
再换个自己开发的程序来测试吧。同样操作,先ps一下,找到进程id,直接top -Hp 想看的进程id,然后在里面挑一个线程id,执行命令
printf "%x\n" 54956   (将 PID 转为 16进制)
jstack 53514 | grep '0xd6ac' -A10 (注意:16进制要在最前面添加0x)
jstack 后面跟进程id,然后grep的时候,带上16进制的线程id,然后看n行,然后分析stack打印信息

这地方看到线程池的名称,结合自己代码,应该是程序在消费kafka数据呢。
另外,也可以将堆栈信息打印下来:jstack 53514 > cpuInfo.txt
然后使用 cat 或者 less 等命令工具进行过滤查看:cat -n cpuInfo.txt | grep -A10 '0xd6ac'
————————————————
版权声明:本文为CSDN博主「请叫我大师兄__」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_27093465/article/details/115954562

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值