专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

Linux性能优化--CPU到100%了该怎么办(下)

除了知道是什么进程导致CPU使用率到100%,我们还想知道是什么方法导致的CPU跑满,应该怎么做呢?

下面就需要使用到分析命令perf,该命令需要安装,在Centos下用 yum install perf来安装。

使用perf来查看,执行perf top

$ perf top 
Samples: 59K of event 'cpu-clock', 4000 Hz, Event count (approx.): 11161651581 lost: 0/0 drop: 0/0                                                                       
Overhead  Shared Object              Symbol                                                                                                                              
  36.37%  libc-2.17.so               [.] __random_r
  28.82%  libc-2.17.so               [.] __random
  10.74%  stress                     [.] 0x0000000000002dc1
   9.34%  libc-2.17.so               [.] rand
   4.64%  stress                     [.] rand@plt
   3.45%  stress                     [.] 0x0000000000002dc9
   2.70%  stress                     [.] 0x0000000000002db8
   0.34%  [kernel]                   [k] __do_softirq
   0.29%  stress                     [.] 0x0000000000002dbd

输出结果中,第一行包含三个数据,分别是采样数(Samples)、事件类型(event)和事件总数量(Event count)。比如这个例子中,perf 总共采集了 59K 个 CPU 时钟事件,而总事件数则为 11161651581。

再往下看是一个表格式样的数据,每一行包含四列,分别是:

第一列 Overhead ,是该符号的性能事件在所有采样中的比例,用百分比来表示。

第二列 Shared ,是该函数或指令所在的动态共享对象(Dynamic Shared Object),如内核、进程名、动态链接库名、内核模块名等。

第三列 Object ,是动态共享对象的类型。比如 [.] 表示用户空间的可执行程序、或者动态链接库,而 [k] 则表示内核空间。

最后一列 Symbol 是符号名,也就是函数名。当函数名未知时,用十六进制的地址来表示。

上述结果中,可以看到__random_r函数占了36.37%

通过top我们可以定位是stress造成了CPU跑满,通过perf top可以看到是random这个方法占用百分比较高,由此可以理解为是stress命令中调用了random导致的CPU占用率达到100%,我们可以用perf命令来验证一下,执行perf top -g -p 9904

$ perf top -g -p 9904 #-g表示显示调用关系,-p表示pid,9904位进程对应的pid
Samples: 376K of event 'cpu-clock', 4000 Hz, Event count (approx.): 23309608704 lost: 0/0 drop: 0/0                                                                      
  Children      Self  Shared Object     Symbol                                                                                                                           
+   37.51%    37.49%  libc-2.17.so      [.] __random_r                                                                                                                  ◆
+   29.60%    29.59%  libc-2.17.so      [.] __random                                                                                                                    ▒
+   11.46%    11.46%  stress            [.] 0x0000000000002dc1                                                                                                          ▒
+    9.72%     9.72%  libc-2.17.so      [.] rand                                                                                                                        ▒
+    4.77%     4.77%  stress            [.] rand@plt                                                                                                                    ▒
+    3.88%     3.88%  stress            [.] 0x0000000000002dc9                                                                                                          ▒
+    2.80%     2.80%  stress            [.] 0x0000000000002db8                                                                                                          ▒
     0.86%     0.00%  stress            [.] 0x0000558753722dc1                                                                                                          ▒
     0.29%     0.00%  stress            [.] 0x0000558753722dc9                                                                                                          ▒
     0.25%     0.25%  stress            [.] 0x0000000000002dbd                                                                                                          ▒
     0.20%     0.00%  stress            [.] 0x0000558753722db8                                                                                                          ▒
     0.03%     0.00%  stress            [.] 0x0000558753722dbd   

可以看到结果前面有“+”号,用方向键移到该结果上点回车,可以打开。

这里我们对pid为9904的进程进行了分析,看到在该进程中,random方法占用了37%左右,就确定了使用率飙升的原因。

文章永久链接:https://tech.souyunku.com/24619

未经允许不得转载:搜云库技术团队 » Linux性能优化--CPU到100%了该怎么办(下)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们