顶部显示第一个屏幕或批量运行时有 64% 处于空闲状态,但实际上根本没有空闲时间

顶部显示第一个屏幕或批量运行时有 64% 处于空闲状态,但实际上根本没有空闲时间

我在几台 4 核服务器上运行着相当繁重的数字运算,所有服务器都运行着 Ubuntu Precise Pangolin LTS 64 位,在云端(所以我认为是在虚拟化环境中)。

为了监控 CPU 使用情况,我编写了一个 .sh,使用“top -b -n 1”(即一次运行 top,仅第一个“帧”)并将其与其他一些数据合并,以编写一份小报告。

但是,对于每个服务器,top 总是报告 CPU 线路上有 64% 处于空闲状态,即使我很确定所有四个核心都处于 100% 繁忙状态。

事实上,以交互方式运行 top,在第一帧中它报告 64% 的空闲时间,但是一旦刷新它就会报告正确的(接近 0% 的空闲)数据。

vmstat 也是如此,在 cpu 列中,总是在第一行报告 64% 的空闲时间,然后开始报告(据称)真实数据。

为什么会这样?是 top/vmstat 或内核中的错误吗?还是这是 CPU % 测量方式的已知副作用?为什么总是 64%?

CPU 负载总是正确的 (大约 4)。

答案1

这是因为 top、vmstat、iostat 都在第一次运行中收集自系统上次重启以来的数据。

并且连续迭代按照您指定的采样周期运行。因此,在第一次运行 top 时,您将看到 %idle 时间,因为从重新启动到运行 top 的时间,空闲时间就是那么多。但在下一次迭代中,由于它很忙,因此不会显示任何 %idle。

排除第一次迭代并尝试在您想要的间隔内进行采样。

答案2

您可以通过grepping 以“Cpu(s)”开头的行并通过管道传输结果来执行此操作tail

top -b -n2 -d 0.1 |grep "Cpu(s)"|tail -n +1

丢弃tail -n +1第一行(坏结果)并只让第二行通过。 意味着-d 0.1第一次和第二次迭代之间有十分之一秒的延迟top-b -n2意味着以批处理模式运行两次。 最终输出的是一行包含“好”结果,然后您可以将其用于报告中。

如果除了“Cpu(s)”行之外还需要其他行,请对每一行进行冲洗并重复。

相关内容