当我执行以下命令来获取 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只能打印自启动以来的平均值。)
ter*_*don 11
这是top. 正如解释这里的第1次迭代top -b开机以来的回报百分比,因此,我们至少需要两次迭代(-n 2)来获得当前的百分比。为了加快速度,您可以将d迭代之间的延迟设置为0.01。top在用户、系统进程和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)
我尝试了几种方法,但这在我看来是最准确的:
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)
从这里得到