Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Linux上获得总体CPU使用率(例如57%)_Linux_Bash_Unix_Cpu - Fatal编程技术网

如何在Linux上获得总体CPU使用率(例如57%)

如何在Linux上获得总体CPU使用率(例如57%),linux,bash,unix,cpu,Linux,Bash,Unix,Cpu,我想知道如何获得系统CPU使用率,并使用bash以百分比表示 样本输出: 57% 如果有多个核心,最好能计算出平均百分比。从sysstat包中尝试mpstat > sudo apt-get install sysstat Linux 3.0.0-13-generic (ws025) 02/10/2012 _x86_64_ (2 CPU) 03:33:26 PM CPU %usr %nice %sys %iowait %irq %soft %s

我想知道如何获得系统CPU使用率,并使用bash以百分比表示

样本输出:

57%

如果有多个核心,最好能计算出平均百分比。

sysstat
包中尝试
mpstat

> sudo apt-get install sysstat
Linux 3.0.0-13-generic (ws025)  02/10/2012  _x86_64_    (2 CPU)  

03:33:26 PM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest   %idle
03:33:26 PM  all    2.39    0.04    0.19    0.34    0.00    0.01    0.00    0.00   97.03
然后一些
cut
grep
解析您需要的信息:

mpstat | grep -A 5 "%idle" | tail -n 1 | awk -F " " '{print 100 -  $ 12}'a

查看
cat/proc/stat

grep'cpu'/proc/stat | awk'{使用率=($2+$4)*100/($2+$4+$5)}结束{打印使用率“%”}

编辑请阅读评论,然后再复制粘贴或将其用于任何严肃的工作。这没有经过测试,也没有使用过,这是一个为那些不想安装实用程序或在任何发行版中都能工作的人设计的想法。有些人认为你可以“安装”任何东西

注意:这不是当前的CPU使用情况,而是自系统启动以来所有内核的总体CPU使用情况。这可能与当前的CPU使用情况非常不同。要获取当前值,必须使用top(或类似工具)

当前CPU使用率可以通过以下方式计算:

awk '{u=$2+$4; t=$2+$4+$5; if (NR==1){u1=u; t1=t;} else print ($2+$4-u1) * 100 / (t-t1) "%"; }' \
<(grep 'cpu ' /proc/stat) <(sleep 1;grep 'cpu ' /proc/stat)
awk'{u=$2+$4;t=$2+$4+$5;if(NR==1){u1=u;t1=t;}其他打印($2+$4-u1)*100/(t-t1)“%;}”\
您可以尝试:

top -bn1 | grep "Cpu(s)" | \
           sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | \
           awk '{print 100 - $1"%"}'

编辑:我注意到在另一个用户的回复中%idle是字段12而不是字段11。awk已更新,以说明%idle字段是可变的

这将使您获得所需的输出:

mpstat | awk '$3 ~ /CPU/ { for(i=1;i<=NF;i++) { if ($i ~ /%idle/) field=i } } $3 ~ /all/ { print 100 - $field }'

mpstat | awk'$3~/CPU/{for(i=1;i可能会给出我的解决方案的实际响应,这是受Peter Liljenberg的启发:

$ mpstat | awk '$12 ~ /[0-9.]+/ { print 100 - $12"%" }'
0.75%
这将使用
awk
打印100减去第12个字段(空闲),后面有一个百分号。
awk
仅对第12个字段只有数字和点的行执行此操作(
$12~/[0-9]+/

您还可以平均五个样本,间隔1秒:

$ mpstat 1 5 | awk 'END{print 100-$NF"%"}'
像这样测试它:

$ mpstat 1 5 | tee /dev/tty | awk 'END{print 100-$NF"%"}'


@julesanchez该值需要通过管道传输到其他地方,因此它必须是一个intdo top>myfile.txt,并在后期处理中应用您的过滤器,不是吗?一个不需要sysstat的命令:
ps-A-o pcpu | tail-n+2 | paste-sd+| bc
重新打开我不明白为什么这被裁定为非主题,关闭它的人可以请求吗是否需要详细说明?我对
/proc/stat
的理解非常有限,但这一行代码对我来说已经足够好了:
cat我不相信这显示了总CPUI,我会说它是100-%idle,这是总CPU使用率(单位%),这是百分比“不”这个答案很好,直到grep | tail | awk部分…我将
awk
部分更改为:
awk-F”“{print(100-$12)”%“}“
,它将输出格式化为他想要的格式,但在其他方面,这对我来说很好。@jordanm All truths;我更喜欢投票,因为它可以工作。我个人会这样做:
mpstat | awk'$12~/[0-9.]+/{print 100-$12}”“
但是你必须像你上面推荐的那样安装mpstat。很多人没有这种灵活性。cat/proc/stat然后pipe比你推荐的mpstat容易得多。+1不明白为什么解析另一个实用程序比解析
/proc/stat
系统+用户+空闲=100%更好。所以可能类似于:grep‘cpu’/proc/stat | awk。”{cpu使用率=($2+$4)*100/($2+$4+$5)}结束{打印cpu使用率“%”'我认为此解决方案不会显示当前的CPU负载,而是显示自CPU启动以来的平均CPU负载。@jlliagre,是的,没错。要计算当前的CPU使用率而不是平均值,您需要先取$1值,然后再取延迟值,然后取$1值并查看差异。这就是当前的CPU使用率。每次运行此命令时,我都会得到准确的sa值me输出(
32.7%
)。当我使用
top-bn2
时,会得到更准确的结果,但这需要很长时间。据我所知,这似乎是获得准确结果的唯一方法。
top-bn1
在我的FC20系统上似乎非常不准确。
top-bn2
似乎工作正常。此答案中的命令似乎是为
top-v
返回
procps ng
(例如Fedora)。在Ubuntu和CentOS上也有
procps
,命令不起作用(总是表示100%,因为CPU数字的行格式不同,解析失败)这里有一个可以同时使用两种实现的版本:
top-b-n2-p1 | fgrep“Cpu(s)”| tail-1 | awk-F'id,-v prefix=“$prefix”{split($1,vs,”);v=vs[length(vs)];sub(“%”,v);printf“%s%.1f%%\n”,prefix,100-v}“
旁注:在OSX上,使用以下命令:
top-l2-n0-F | egrep-o'\d*.\d+%idle'| tail-1 | awk-F-v-prefix=“$prefix”{printf”%s%.1f%%\n“,prefix,100-$1}”
。运行“mpstat2 1 |…”否则,默认情况下,mpstat会显示从开始到现在的统计数据,并且随着时间的推移不会有太大变化“mpstat | awk'$12~/[0-9.]+/{print 100-$11”%“}”这对我来说很有用。@Sarang非常感谢!!最后我可以得到
conky
显示的结果。不幸的是,这行速度非常慢,几乎需要整整一秒钟的时间来执行。@syntaxerror这只需要2秒钟,因为如果您查看命令help,您会发现第一个参数是间隔b但由于第二个参数,它只执行一次,因此它会等待2秒钟直到返回结果。问题已结束,因此将我(类似)的答案添加到您的答案中:-)希望您不介意。和您一样,我也受到了Peter Liljenberg的答案的启发。
mpstat 1 1 1 | awk'$3~/CPU/{for(i=1;ii如果您有jq:
mpstat-o JSON-u 1 1 | jq'.sysstat.hosts[0].统计信息[0][“cpu负载”][0].空闲'
$ mpstat 1 5 | tee /dev/tty | awk 'END{print 100-$NF"%"}'