欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux进程占用cpu过高问题排查步骤

程序员文章站 2024-01-23 12:08:04
...

CPU飙升
1,查找飙升进程:28207

top

linux进程占用cpu过高问题排查步骤

image.png

2,查找飙升线程:

ps -mp 28207 -o THREAD,tid,time | sort -rn > mp.txt

linux进程占用cpu过高问题排查步骤

image.png

3,线程号转16进制

printf "%x\n" 28210
6e32
printf "%x\n" 28211
6e33

4,打印异常堆栈信息

#jstack pid |grep tid -A 30
jstack 28207 |grep 6e32 -A 30

linux进程占用cpu过高问题排查步骤

image.png

 

发现是gc线程在占用cpu。

5,查看gc情况:

#jstat -gcutil pid  3000
jstat -gcutil 28207  3000

linux进程占用cpu过高问题排查步骤

image.png

发现ygc和fgc都比较频繁。
查看堆栈去分配数量

jstat -gccapacity  28207 3000

linux进程占用cpu过高问题排查步骤

image.png

6,导出内存进行分析
从上面分析可以看出,CPU飙升,都是GC线程在频繁执行。而且每次FGC执行都释放不了多少内存,怀疑有内存泄露。需要dump出内存分配信息,供分析。

jmap -dump:format=b,file=heapdump.phrof 28207
#压缩
tar -zcvf heapdump.tar.gz heapdump.phrof

7,下载dump文件,并使用本地MAT工具进行分析

下面是阿里出的工具,原理就是上面的步骤
安装方法:https://github.com/oldratlee/useful-scripts/blob/master/docs/install.md
使用方法:https://github.com/oldratlee/useful-scripts/blob/master/docs/java.md#-show-busy-java-threads

linux进程占用cpu过高问题排查步骤

image.png

 

相关标签: 随笔