当我执行以下命令来获取 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.01
。top
将 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。