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

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

如果CPU导了100%,第一步肯定用top命令来查看

top - 15:12:21 up 245 days, 20:55,  2 users,  load average: 0.98, 0.74, 0.38
Tasks: 131 total,   2 running, 129 sleeping,   0 stopped,   0 zombie
%Cpu(s): 25.1 us,  0.2 sy,  0.0 ni, 74.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8008844 total,   285060 free,  1806168 used,  5917616 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  5831264 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                              
 9904 root      20   0    7308     96      0 R 100.0  0.0   6:43.68 stress                                                                                               
14814 root      20   0 5705212 894664   7788 S   0.3 11.2  59:19.13 java                                                                                                 
18453 root      20   0  611272  13740   2368 S   0.3  0.2   5:19.06 barad_agent                                                                                          
20217 root      20   0       0      0      0 S   0.3  0.0  84:18.59 xfsaild/vdb                                                                                          
24911 root      20   0 1193940  25692   6504 S   0.3  0.3 106:21.63 dockerd-current                                                                                      
    1 root      20   0  191172   3704   2188 S   0.0  0.0 105:20.27 systemd     

可以看到此刻的我的linux系统有131个任务,其中2个在运行,129个在休眠。

看%CPU(s)这一行,25.1 us表示用户态导致了25%的CPU使用率,0.2 sy是内核态,74.7 id表示74.7%的CPU是空闲的,这时我们在按“1”,可以看到下面的结果

top - 15:16:08 up 245 days, 20:59,  2 users,  load average: 1.04, 0.89, 0.52
Tasks: 133 total,   2 running, 131 sleeping,   0 stopped,   0 zombie
%Cpu0  :  0.3 us,  0.3 sy,  0.0 ni, 99.0 id,  0.3 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu1  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu2  :100.0 us,  0.0 sy,  0.0 ni,  0.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
%Cpu3  :  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  8008844 total,   284472 free,  1806496 used,  5917876 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  5830884 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                              
 9904 root      20   0    7308     96      0 R 100.0  0.0  10:30.94 stress                                                                                               
18150 root      20   0  167540  38684   3940 S   0.3  0.5  34:33.35 YDService                                                                                            
18453 root      20   0  611272  13740   2368 S   0.3  0.2   5:20.08 barad_agent                                                                                          
    1 root      20   0  191172   3704   2188 S   0.0  0.0 105:20.36 systemd                                                                                              
    2 root      20   0       0      0      0 S   0.0  0.0   0:07.84 kthreadd                                                                                             
    3 root      20   0       0      0      0 S   0.0  0.0   3:43.33 ksoftirqd/0                                                                                          
    5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H                                                                                         
    7 root      rt   0       0      0      0 S   0.0  0.0   1:59.68 migration/0  

比较两个结果发现%CPU(s)没有了,变成了%CPU0,%CPU1,%CPU2,%CPU3。这是因为在top情况下,%CPU(s)显示所有CPU相加的结果,按了“1”,切换到每个CPU的结果。

可以看到我这里有4个CPU,其他CPU2的使用率是100%,所以4个CPU的使用率就是1/4 = 25%,跟top命令看到的一致。

因为我用stress模拟把一个CPU跑满的,所以可以看到进程列表显示stress造成了100%的使用率。

或者使用pidstat命令可以看到CPU使用情况。

$ pidstat 2 5 #表示每2秒输出一次结果,输出5次
Linux 3.10.0-957.21.3.el7.x86_64 (Tbj3-omie-web1)       07/23/2020      _x86_64_        (4 CPU)

03:24:57 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
03:24:59 PM     0      9904  100.00    0.00    0.00  100.00     3  stress
03:24:59 PM     0     15335    0.00    0.50    0.00    0.50     2  pidstat

03:24:59 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
03:25:01 PM     0         9    0.00    1.00    0.00    1.00     2  rcu_sched
03:25:01 PM     0       125    0.00    0.50    0.00    0.50     2  kauditd
03:25:01 PM    81      2907    1.00    0.50    0.00    1.50     0  dbus-daemon
03:25:01 PM     0      2915    0.00    0.50    0.00    0.50     0  systemd-logind
03:25:01 PM   999      2916    0.50    0.00    0.00    0.50     0  polkitd
03:25:01 PM     0      9904   92.00    0.00    0.00   92.00     2  stress
03:25:01 PM     0     14794    0.00    0.50    0.00    0.50     3  docker-containe
03:25:01 PM     0     14814    0.50    0.50    0.00    1.00     0  java
03:25:01 PM     0     15352    2.50    1.00    0.00    3.50     1  python
03:25:01 PM     0     15383    4.50    1.00    0.00    5.50     2  python
03:25:01 PM     0     15384    5.00    1.50    0.00    6.50     1  python
03:25:01 PM     0     15385    6.00    1.50    0.00    7.50     0  python
03:25:01 PM     0     15386    5.50    0.50    0.00    6.00     3  python
03:25:01 PM     0     15397    1.00    0.00    0.00    1.00     1  python
03:25:01 PM     0     15406    1.00    0.50    0.00    1.50     3  python
03:25:01 PM     0     15417    0.50    0.00    0.00    0.50     3  python
03:25:01 PM     0     18150    0.00    1.00    0.00    1.00     1  YDService
03:25:01 PM     0     18453    0.50    0.00    0.00    0.50     1  barad_agent
03:25:01 PM     0     20217    0.00    0.50    0.00    0.50     2  xfsaild/vdb
03:25:01 PM     0     24911    0.00    0.50    0.00    0.50     2  dockerd-current

03:25:01 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
03:25:03 PM    81      2907    0.00    0.50    0.00    0.50     3  dbus-daemon
03:25:03 PM     0      9904   99.50    0.00    0.00   99.50     1  stress
03:25:03 PM     0     15335    0.00    0.50    0.00    0.50     2  pidstat
03:25:03 PM     0     18453    0.50    0.50    0.00    1.00     1  barad_agent
03:25:03 PM     0     24911    1.00    0.00    0.00    1.00     2  dockerd-current

也可以发现是PID为9904的这个进程,导致的CPU使用率100%。

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

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

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

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

联系我们联系我们