实时获取cpu使用情况

实时获取cpu使用情况

当我执行以下命令来获取 CPU 使用率时,我得到了 nice + 用户 CPU 使用率。

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

输出:

14.5

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

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

答案1

如果您可以承受一秒钟的延迟,这将以简单的百分比形式打印 CPU 使用率:

echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]

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

答案2

这是 的一个已知问题top。正如所解释的这里,第一次迭代top -b返回自启动以来的百分比,因此我们需要至少两次迭代(-n 2)才能获得当前百分比。为了加快速度,您可以将d迭代之间的延迟设置为0.01top将 CPU 使用率分为用户、系统进程和nice进程,我们需要三者的总和。最后,您使用grep包含 CPU 百分比的行,然后使用gawk来对用户、系统和 nice 进程求和:

    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

答案3

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

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)}'

来自这里

答案4

我需要每个核心的 CPU 使用率,并使用 sysstat 包中的 mpstat。

sudo apt install sysstat

CPU0 使用率(%):

echo 100 - $(mpstat -P 0 | tail -1 | awk '{print $13}') | bc

CPU1 利用率(%):

echo 100 - $(mpstat -P 1 | tail -1 | awk '{print $13}') | bc

如果有超过 2 个核心,请更改 -PX。

相关内容