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

TTT*_*TTT 5 linux top ps

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

正如我上面链接的问题所建议的那样,这真的只是这两个工具如何处理 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
Run Code Online (Sandbox Code Playgroud)

输出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
Run Code Online (Sandbox Code Playgroud)

小智 10

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

从人顶部:

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

来自人 ps:

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

因此,假设您有一个在一周前启动的进程,在此期间它平均使用了 2.2% 的 CPU 时间。如果它突然变得 CPU 密集型(持续消耗 100%) - 查看 ps 您会在前几个小时观察到相同的 2.2%。


ter*_*don 4

最可能的原因是,百分比值显示为单个CPUtop的百分比,同时显示总可用 CPU 功率的百分比。尝试在运行时运行 top 并点击以显示所有核心的百分比。psShiftI

如果这是一个具有大量 CPU 的服务器集群,那么您所描述的是正常行为。另请参阅此处