如果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%。
来源:oschina
链接:https://my.oschina.net/aidelingyu/blog/4424202