之前不清楚它的含义,以为系统有问题。
procps版本的top,%CPU列的值会给人造成误解,各task的CPU和 大于 顶部的us+sy。
显示如下:
top.t - 04:03:33 up 4:03, 2 users, load average: 1.34, 0.52, 0.38
Tasks: 47 total, 3 running, 44 sleeping, 0 stopped, 0 zombie
Cpu(s): <strong><span style="color:#ff0000;">65.0%us, 35.0%sy</span></strong>, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 710736k total, 17056k used, 693680k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 4692k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1159 root 20 0 1608 376 320 R <span style="color:#ff0000;"><strong>100</strong> </span>0.1 0:08.77 dhry_test
1160 root 20 0 1608 376 320 R <span style="color:#ff0000;"><strong>99</strong> </span>0.1 0:08.00 dhry_test
1 root 20 0 2992 652 584 S 0 0.1 0:03.35 init
其中100 + 99 超过了总的CPU使用率。
在top 的man中解释:
k: %CPU -- CPU usage
The task's share of the elapsed CPU time since the last screen update, expressed as a percentage of total CPU time. In a true
SMP environment, if 'Irix mode' is Off, top will operate in 'Solaris mode' where a task's cpu usage will be divided by the
total number of CPUs. You toggle 'Irix/Solaris' modes with the 'I' interactive command.
默认是Irix mode,即显示的是总的CPU时间。
可以输入 'I' 来关闭Irix mode模式,这样看起来就比较容易理解。
top.t - 04:12:57 up 4:12, 2 users, load average: 0.16, 0.23, 0.34
Tasks: 47 total, 3 running, 44 sleeping, 0 stopped, 0 zombie
Cpu(s): 64.8%us, 35.2%sy, 0.0%ni, 0.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 710736k total, 17064k used, 693672k free, 0k buffers
Swap: 0k total, 0k used, 0k free, 4692k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
1163 root 20 0 1608 376 320 R <strong><span style="color:#ff0000;">50.2</span></strong> 0.1 0:08.03 dhry_test
1164 root 20 0 1608 376 320 R <span style="color:#ff0000;"><strong>49.9</strong></span> 0.1 0:07.18 dhry_test