当前位置: 首页>>技术教程>>正文


使用命令显示 CPU 使用情况

, ,

问题描述

我想查看 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 那么第二帧始终是动态的。所以顺序是:

  1. 获取顶部的前 2 帧:top -bn2

  2. 然后从这些帧中仅取出包含 ‘%Cpu’: grep '%Cpu' 的行

  3. 然后只取最后一次出现/行: `tail -1`

  4. 然后获取空闲值(有4或5个字符,一个空格,”id,”):grep -P '(....|...) id,'

希望它有帮助,\n保罗

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/14457.html,未经允许,请勿转载。