jun*_*ang 6 process top cpu-usage
我ls
在 Ubuntu Linux 终端中运行以下命令(执行10,000 次)并使用该top
命令监视 CPU 使用情况。虽然top
显示总 CPU 使用率(第 2 行)约为 48%(13.1% 用户 + 34.9% 内核),但下面的列表并未反映正确的 CPU 使用率。只有 6.5% 的 CPU 与 bash 进程相关。注意:我已经关闭了 Irix 模式,所以 6.5% 与第 2 行的比例相同。
for i in {1..10000}; do (ls /tmp/ >/dev/null); done
Run Code Online (Sandbox Code Playgroud)
我还尝试htop
取消选中“隐藏内核线程”选项,但得到了相同的结果。
系统的哪个部分正在使用 CPU(内核?)以及为什么它对top
/隐藏htop
?
您正在运行许多极短生命周期的进程。您不会在顶部输出中看到太多它们。
Top 定期测量系统活动(通常每秒一次)。每次刷新时,它都会查看进程列表并收集每个进程的统计信息。根据调度抽签的运气,此时可能有零个或一个ls
进程。如果top
没有看到一个ls
进程,它就不会显示一个。即使top
看到一个进程ls
,获取统计信息也不是原子的;如果该进程在top
枚举进程的时间和读取该进程的统计信息的时间之间死亡,则不会显示该进程。所以通常没有任何ls
流程可以列出。
即使有ls
进程,该进程也没有运行很长时间,因此它在最后一秒的 CPU 使用率中所占的份额可以忽略不计。它很可能位于列表底部附近。
因为 CPU 使用率不是以原子方式测量的,只是一个近似值,所以内核收集的 CPU 总使用率统计信息并不总是与逐个进程收集的使用率统计信息的总和相匹配。对于运行时间足够长的进程,总和将匹配,但是当存在短期进程时,如本示例所示,它们可能会有很大差异。