我的 ubuntu 运行在 32 核多核 CPU 上。当我使用 top 命令检查 CPU 使用率时,有时会显示超过 100%,如 340%、650% 等。我做了一些调查,发现它实际上是不同核心使用率的总和。例如,如果第一个 CPU 使用率为 20%,第二个为 30%,第三个为 40%,其余为 0%,则“top”显示 20+30+40=90%。
这有点令人困惑和误导。我相信 top 命令应该通过计算所有核心的使用情况来显示 0 到 100 之间的 CPU 使用率。在我上面的例子中,我预计 -(90*100)/3200 =2.8125%。这是 top 命令的一个错误吗?它应该被视为未来版本的增强功能吗?请指教
答案1
默认情况下,top
以单个 CPU 的百分比形式显示 CPU 使用率。在多核系统上,您可以看到 CPU 使用率百分比大于 100%。您可以在 top 运行时按Shift+来切换此行为i,以显示正在使用的可用 CPU 的总体百分比。
htop
是 的更好替代方案top
。在 中htop
,您可以看到您的程序如何消耗所有 32 个核心。
答案2
看来我找到了方法 :-) 如果我在运行 top 命令时切换到 solaris 模式,它会显示正确的 cpu 使用率。要切换到 solaris 模式,首先运行 top 命令,然后按 shift+i
参考文章
https://help.gnome.org/users/gnome-system-monitor/stable/solaris-mode.html.en https://unix.stackexchange.com/questions/15733/why-process-cpu-usage-larger-than-total-cpu-time
答案3
- 您必须使用“-H”选项来获取线程的实际 CPU 使用率。假设我有一个程序“load”,该程序创建三个线程。每个线程都处于无限循环中,以使 CPU 利用率达到 100%。
- 这里父级有 ID = 181906、线程 1 ID = 181907、线程 2 ID = 181908 和线程 3 ID = 181909。
- 使用 top 命令,我看到 ID = 181906 的负载占用了 300% 的 CPU。
- 使用 top -H -p 181906 后,加载 ID = 181906 0 %CPU 线程1 ID = 181907 99 %CPU 线程2 ID = 181908 99 %CPU 线程3 ID = 181909 99 %CPU
因此,最后,使用 -H 选项以及顶部 -p 选项来获取实际的 CPU 利用率。