CPU使用率100%如何定位分析?

编程入门 行业动态 更新时间:2024-10-19 08:53:51

CPU<a href=https://www.elefans.com/category/jswz/34/1771248.html style=使用率100%如何定位分析?"/>

CPU使用率100%如何定位分析?

1、首先通过top指令查看当前占用CPU较高的进程PID

$ top -c

2、按下”shift+p”找到CPU使用率最高的进程

(按shft+p按照cpu占用进行排序,按shift+m按照内存占用进行排序)

此时发现9331的java进程CPU高达253.4%,且一直降不下来,很显然9331这个进程出现了问题。

top - 17:57:20 up 91 days, 20:37,  1 user,  load average: 3.34, 3.14, 2.23
Tasks: 180 total,   1 running, 179 sleeping,   0 stopped,   0 zombie
Cpu(s): 46.1%us, 13.4%sy,  0.0%ni, 36.2%id,  0.1%wa,  0.0%hi,  2.5%si,  1.7%st
Mem:   8059860k total,  7888496k used,   171364k free,    22648k buffers
Swap: 10485752k total,        0k used, 10485752k free,  2750132k cachedPID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND7331 kafka     20   0 43.2g 4.3g  16m S 253.4 56.2   3942:19 /home/kafka/software/java/bin/java -Xms4G -Xmx4G -server -XX:+UseG1GC -XX:MaxGCPauseMi

3、使用top -Hp命令定位线程

因为java使用的是单进程多线程,所有需要通过进程PID(7331)找到CPU最高的线程

$ top -Hp 7331

很容易发现,多个线程的CPU占用达到了56%多。我们挑选线程号为7573的线程继续分析。

top - 18:01:28 up 91 days, 20:41,  1 user,  load average: 1.90, 2.31, 2.08
Tasks:  90 total,   6 running,  84 sleeping,   0 stopped,   0 zombie
Cpu(s): 43.2%us, 14.6%sy,  0.0%ni, 38.4%id,  0.1%wa,  0.0%hi,  3.0%si,  0.8%st
Mem:   8059860k total,  7888236k used,   171624k free,    24888k buffers
Swap: 10485752k total,        0k used, 10485752k free,  2741760k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND
 7535 kafka     20   0 43.6g 4.3g  11m R 21.0 56.2 318:04.55 java
 7481 kafka     20   0 43.6g 4.3g  11m R 20.0 56.2 230:05.61 java
 7534 kafka     20   0 43.6g 4.3g  11m S 18.6 56.2 297:30.55 java
 7475 kafka     20   0 43.6g 4.3g  11m S 16.3 56.2 229:33.86 java
 7477 kafka     20   0 43.6g 4.3g  11m S 15.6 56.2 229:55.57 java
 7478 kafka     20   0 43.6g 4.3g  11m S 15.3 56.2 229:38.64 java
 7482 kafka     20   0 43.6g 4.3g  11m R 15.0 56.2 230:00.66 java

4、将线程id转成16进制

printf “%x\n” 命令(tid指线程的id号)将以上10进制的线程号转换为16进制:

$ printf %x 7535

1d6f

5、使用jstack命令导出java进程的线程快照,再根据16进制县城号定位具体代码

因为 1d6f 为十六进制,所以加上0x在grep会跟准确,不然可能会被其他信息干扰。

$ jstack 7331 | grep "0x1d6f" -C30 --color

6、找到具体的代码,就可以看源码分析问题原因。

此处不再做介绍,因为没有案例截图,以后再补充。

更多推荐

CPU使用率100%如何定位分析?

本文发布于:2023-07-28 21:52:57,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1329709.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:使用率   CPU

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!