9

我正在使用在 Debian 下运行的单核小型 ARM 处理器,并且无法理解 top 的 CPU 利用率输出,请参阅:

top - 15:31:54 up 30 days, 23:00,  2 users,  load average: 0.90, 0.89, 0.87
Tasks:  44 total,   1 running,  43 sleeping,   0 stopped,   0 zombie
Cpu(s): 65.0%us, 20.3%sy,  0.0%ni, 14.5%id,  0.0%wa,  0.0%hi,  0.3%si,  0.0%st
Mem:     61540k total,    40056k used,    21484k free,        0k buffers
Swap:        0k total,        0k used,        0k free,    22260k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                    
26028 root      20   0  2536 1124  912 R  1.9  1.8   0:00.30 top                                                                                        
31231 root      19  -1 45260  964  556 S  1.9  1.6   1206:15 owserver                                                                                   
    3 root      15  -5     0    0    0 S  0.3  0.0   0:08.68 ksoftirqd/0                                                                                
  694 root      20   0 28640  840  412 S  0.3  1.4 468:26.74 rsyslogd         

%CPU 列在所有进程中都非常低,在这个例子中它总共是 4.4%(下面的所有其他进程都在 0% 上)但是第 3 行的整个 CPU 显示 65%us 和 20%sy,所以对于一个非常高的价值 - 顺便说一下,这就是系统的感觉:非常慢:-(系统几乎总是处于这种状态:所有进程的 CPU 非常低,但用户 + 系统 CPU 高。任何人都可以解释为什么 top 工具输出中存在如此高的不一致?我可以使用什么工具来更好地找出导致用户+系统 CPU 利用率高的原因 - top 在这里似乎没用。

更新:同时我在这里找到了这个线程,它讨论了一个类似的问题,但我无法验证那里写的是什么:

  • 命令uptime显示每 1/5/15 分钟的平均 CPU 利用率
  • 这与 %us+%sy 之和的顶部输出的第一行接近。但这变化更大,也许是每 10 秒的平均值?
  • 即使在top output上看更长的时间,%us+%sy的总和总是比所有%CPU的总和高几倍

谢谢阿奇姆

4

1 回答 1

7

您应该阅读manpageoftop以更敏锐地理解其输出。从手册页:

%CPU -- CPU 使用率

自上次屏幕更新以来任务占用的 CPU 时间份额,以占总 CPU 时间的百分比表示。默认屏幕更新时间为 3 秒,可使用 更改#top -d ss.tt。要测量交流 CPU 使用率,请运行top -S.

-S:累积时间模式切换

从最后一次记住的“S”状态反转开始。当“累积模式”打开时,每个进程都会列出它及其死去的子进程使用的 CPU 时间。

CPU 状态显示在摘要区域中。它们始终显示为百分比,并且是从现在到最后一次刷新之间的时间。

    us  --  User CPU time
      The time the CPU has spent running users' processes that are not niced.

    sy  --  System CPU time
      The time the CPU has spent running the kernel and its processes.

    ni  --  Nice CPU time
      The time the CPU has spent running users' proccess that have been niced.

    wa  --  iowait
      Amount of time the CPU has been waiting for I/O to complete.

    hi  --  Hardware IRQ
      The amount of time the CPU has been servicing hardware interrupts.

    si  --  Software Interrupts
      The amount of time the CPU has been servicing software interrupts.

    st  --  Steal Time
      The amount of CPU 'stolen' from this virtual machine by the hypervisor for other tasks (such as running another virtual machine).

在正常情况下,%us+%sy 应该总是更高。

于 2012-12-10T12:18:20.180 回答