当前位置:主页 > 查看内容

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

发布时间:2021-09-17 00:00| 位朋友查看

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

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'

;原文链接:https://blog.csdn.net/qq_27093465/article/details/115954562
本站部分内容转载于网络,版权归原作者所有,转载之目的在于传播更多优秀技术内容,如有侵权请联系QQ/微信:153890879删除,谢谢!

推荐图文


随机推荐