问题描述
我想查看 CPU 使用情况。\n我使用了以下命令:
top -bn1 | grep "Cpu(s)" |
sed "s/.*, *\([0-9.]*\)%* id.*/\1/" |
awk '{print 100 - $1}'
但它返回 100%。\n正确的方法是什么?
最佳办法
为什么不使用 htop
[交互式进程查看器]?为了安装它,打开一个终端窗口并输入:
sudo apt-get install htop
另请参阅 man htop
了解更多信息以及如何设置。
\n
次佳办法
要获取 CPU 使用情况,最好的方法是读取 /proc/stat 文件。请参阅 man 5 proc
获取更多帮助。
我发现 Paul Colby 编写了一个有用的脚本 here
#!/bin/bash
# by Paul Colby (http://colby.id.au), no rights reserved ;)
PREV_TOTAL=0
PREV_IDLE=0
while true; do
CPU=(`cat /proc/stat | grep '^cpu '`) # Get the total CPU statistics.
unset CPU[0] # Discard the "cpu" prefix.
IDLE=${CPU[4]} # Get the idle CPU time.
# Calculate the total CPU time.
TOTAL=0
for VALUE in "${CPU[@]:0:4}"; do
let "TOTAL=$TOTAL+$VALUE"
done
# Calculate the CPU usage since we last checked.
let "DIFF_IDLE=$IDLE-$PREV_IDLE"
let "DIFF_TOTAL=$TOTAL-$PREV_TOTAL"
let "DIFF_USAGE=(1000*($DIFF_TOTAL-$DIFF_IDLE)/$DIFF_TOTAL+5)/10"
echo -en "\rCPU: $DIFF_USAGE% \b\b"
# Remember the total and idle CPU times for the next check.
PREV_TOTAL="$TOTAL"
PREV_IDLE="$IDLE"
# Wait before checking again.
sleep 1
done
保存到 cpu_usage
,添加执行权限 chmod +x cpu_usage
并运行:
./cpu_usage
要停止脚本,请点击 Ctrl
+ c
第三种办法
我找到了一个效果很好的解决方案,如下:
top -bn2 | grep '%Cpu' | tail -1 | grep -P '(....|...) id,'
我不确定,但在我看来,带有 -n
参数的 top
的第一次迭代返回一些虚拟数据,在我的所有测试中始终相同。
如果我使用 -n2
那么第二帧始终是动态的。所以顺序是:
-
获取顶部的前 2 帧:
top -bn2
-
然后从这些帧中仅取出包含 ‘%Cpu’:
grep '%Cpu'
的行 -
然后只取最后一次出现/行: `tail -1`
-
然后获取空闲值(有4或5个字符,一个空格,”id,”):
grep -P '(....|...) id,'
希望它有帮助,\n保罗