ps 和 top 给出不同的 CPU 使用率

ps 和 top 给出不同的 CPU 使用率

我见过一些类似的帖子,其中最引人注目的是这里,但对答案并不十分满意。我正在比较特定进程的 top和结果,发现 CPU 使用率存在巨大差异。在不同间隔(包括持续高点的时期,3-4 个间隔 >50%)之间变化,而稳定在 2.2%。我正在观察的进程没有任何子进程或任何东西,所以我不太确定该怎么做。由于 中有持续的高点,我觉得我可以排除采样间隔。 pstoppstop

正如我上面链接的问题所暗示的那样,这真的只是这两个工具处理 I/O 等待时间方式的差异吗?

编辑:
我曾看到它在 中波动至 2.1% ps,但目前为止就是这样。输出自top -p 4522

PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND  
4522 root      16   0  340m 316m 4732 R 54.7  1.3 508:57.46 maui

输出自ps u -p 4522

 USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND  
root      4522  2.2  1.3 348764 324456 ?       Ss   Aug25 509:25 /usr/local/maui/sbin/maui

答案1

最可能的原因是,将top百分比值显示为单身的CPU 会ps显示总可用 CPU 功率的百分比。尝试运行 top 并ShiftI在其运行时点击以显示所有核心的百分比。

如果这是一个拥有大量 CPU 的服务器集群,则您所描述的行为是正常行为。另请参阅这里

答案2

这个问题很老了,但我认为答案是不正确的。ps 和 top 使用不同的方法计算 CPU 使用率。

来自 man top:

  1. %CPU——CPU 使用率 该任务所占的已用时间份额自上次屏幕更新以来的 CPU 时间,以占总 CPU 时间的百分比表示。

来自 man ps:

CPU 使用率目前表示为进程整个生命周期内运行所花费的时间

假设您有一个一周前启动的进程,在此期间它平均使用了 2.2% 的 CPU 时间。如果突然它变得占用大量 CPU(持续消耗 100%)——查看 ps 您会在最初几个小时内观察到同样的 2.2%。

相关内容