实时获取 CPU 使用率

KK *_*tel 13 command-line top

当我执行以下命令来获取 cpu 使用率时,我得到了很好的 + 用户 cpu 使用率。

top -b -n1 | grep "Cpu(s)" | awk '{print $2 + $4}' 
Run Code Online (Sandbox Code Playgroud)

输出:

14.5
Run Code Online (Sandbox Code Playgroud)

在这里,我遇到的问题是输出取决于 top 命令,因此它不会像 top 命令一样立即更改。所以我没有立即获得正确的 CPU。它提供相同的输出并且不会改变。

我想在输出中获得实时 CPU 使用率。请帮助我改进我的命令。

Pau*_*aul 24

如果你能承受一秒的延迟,这将打印 CPU 使用率作为一个简单的百分比:

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
Run Code Online (Sandbox Code Playgroud)

(没有一秒延迟,vmstat只能打印自启动以来的平均值。)

  • 您需要像这样使用 `vmstat 1 2`: `echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]` 否则您的 `vmstat` 将给出值 _since boot_这可能不是你想要的。 (3认同)

ter*_*don 11

这是top. 正如解释这里的第1次迭代top -b开机以来的回报百分比,因此,我们至少需要两次迭代(-n 2)来获得当前的百分比。为了加快速度,您可以将d迭代之间的延迟设置为0.01top在用户、系统进程和nice进程之间分配 CPU 使用率,我们想要三者的总和。最后,您grep使用包含 CPU 百分比的行,然后用于gawk对用户、系统和良好进程求和:

    top -bn 2 -d 0.01 | grep '^%Cpu' | tail -n 1 | gawk '{print $2+$4+$6}'
        -----  ------   -----------    ---------   ----------------------
          |      |           |             |             |------> add the values
          |      |           |             |--> keep only the 2nd iteration
          |      |           |----------------> keep only the CPU use lines
          |      |----------------------------> set the delay between runs
          |-----------------------------------> run twice in batch mode
Run Code Online (Sandbox Code Playgroud)


lep*_*epe 7

我尝试了几种方法,但这在我看来是最准确的:

cat <(grep 'cpu ' /proc/stat) <(sleep 1 && grep 'cpu ' /proc/stat) | awk -v RS="" '{print ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}'
Run Code Online (Sandbox Code Playgroud)

这里得到

  • 最佳答案!谢谢!我的变体: cat &lt;(grep 'cpu ' /proc/stat) &lt;(sleep 0.1 &amp;&amp; grep 'cpu ' /proc/stat) | awk -v RS="" '{printf "%.1f", ($13-$2+$15-$4)*100/($13-$2+$15-$4+$16-$5)}' (2认同)