如何使用bash获得处理器使用百分比?

时间:2014-11-06 23:16:48

标签: linux bash shell awk centos

我想知道如何将处理器使用率的百分比从0%提高到100%?

知道使用我的处理器有多少百分比,最好是用bash或其他方法提供百分比。

我有这个脚本,我在谷歌上发现,但它是非常不精确的 我试图做出更多的改进,有没有人知道任何方法来获得%0-100的CPU利用率百分比

我的剧本

NUMCPUS=`grep ^proc /proc/cpuinfo | wc -l`; FIRST=`cat /proc/stat | awk '/^cpu / {print $5}'`; sleep 1; SECOND=`cat /proc/stat | awk '/^cpu / {print $5}'`; USED=`echo 2 k 100 $SECOND $FIRST - $NUMCPUS / - p | dc`; echo ${USED}% CPU Usage

4 个答案:

答案 0 :(得分:8)

处理器使用或使用是一段时间内的衡量标准。测量%中的利用率的一种方法是通过计算/proc/stat的两次连续读取。用于计算百分比的简单常用bash脚本是:

#!/bin/bash

# Read /proc/stat file (for first datapoint)
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

# compute active and total utilizations
cpu_active_prev=$((user+system+nice+softirq+steal))
cpu_total_prev=$((user+system+nice+softirq+steal+idle+iowait))

usleep 50000

# Read /proc/stat file (for second datapoint)
read cpu user nice system idle iowait irq softirq steal guest< /proc/stat

# compute active and total utilizations
cpu_active_cur=$((user+system+nice+softirq+steal))
cpu_total_cur=$((user+system+nice+softirq+steal+idle+iowait))

# compute CPU utilization (%)
cpu_util=$((100*( cpu_active_cur-cpu_active_prev ) / (cpu_total_cur-cpu_total_prev) ))

printf " Current CPU Utilization : %s\n" "$cpu_util"

exit 0

使用/输出:

$ bash procstat-cpu.sh
 Current CPU Utilization : 10

输出超过5次迭代:

$ ( declare -i cnt=0; while [ "$cnt" -lt 5 ]; do bash procstat-cpu.sh; ((cnt++)); done )
 Current CPU Utilization : 20
 Current CPU Utilization : 18
 Current CPU Utilization : 18
 Current CPU Utilization : 18
 Current CPU Utilization : 18

答案 1 :(得分:7)

top -bn1 | sed -n '/Cpu/p'

给出以下行

Cpu(s): 15.4%us,  5.3%sy,  0.0%ni, 78.6%id,  0.5%wa,  0.0%hi,  0.1%si,  0.0%st

您可以使用以下内容拉取任何CPU字段用户 CPU(我们)

top -bn1 | sed -n '/Cpu/p' | awk '{print $2}' | sed 's/..,//'

输出:

15.4%

如果您想要其他字段,例如系统 CPU(sy),您可以从$ 2更改awk字段,

top -bn1 | sed -n '/Cpu/p' | awk '{print $3}' | sed 's/..,//'

输出:

5.3%

如果你想要其他CPU:

us:     user    CPU used by user processes
sy:     system  CPU used by system/kernel processes
ni:     nice    CPU used by processes that were reniced
id:     idle    CPU not used
wa:     io wait     Essentially idle CPU waiting on IO devices
hi:     hardware irq    CPU used to service hardware IRQs
si:     software irq    CPU used to service soft IRQs
st:     steal time  CPU time which the hypervisor dedicated (or ‘stole’) for other guests in the system.

答案 2 :(得分:6)

自启用系统以来获得使用百分比:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat

获取最后一秒的使用百分比:

awk -v a="$(awk '/cpu /{print $2+$4,$2+$4+$5}' /proc/stat; sleep 1)" '/cpu /{split(a,b," "); print 100*($2+$4-b[1])/($2+$4+$5-b[2])}'  /proc/stat

解释

man 5 proc开始,/proc/stat中cpu行的前四个数字的含义由下式给出:

  

cpu 3357 0 4313 1362393
                       以USER_HZ为单位的时间量(在大多数体系结构上为1/100秒,使用sysconf(_SC_CLK_TCK))   ,以获得正确的价值),系统花了                        在用户模式下,分别具有低优先级(nice),系统模式和空闲任务的用户模式。最后一个值   应该是USER_HZ乘以正常运行时间的第二个条目                        伪文件。

获取CPU使用率,我们添加用户和系统时间并除以用户,系统和空闲时间的总和。

让我们再看一下自系统启动以来总CPU使用率的计算:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat

通过要求行匹配cpu,我们获得系统总数。第二列是用户时间,第四列是系统时间,第五列是空闲时间。该比率乘以100得到一个百分比。

现在,让我们考虑最近的CPU使用情况:

 awk -v a="$(awk '/cpu /{print $2+$4,$2+$4+$5}' /proc/stat; sleep 1)" '/cpu /{split(a,b," "); print 100*($2+$4-b[1])/($2+$4+$5-b[2])}'  /proc/stat

这会两次读取/proc/cpu,相隔一秒。第一次,CPU用户+系统和用户+系统+空闲时间保存在变量a中。 sleep被要求延迟一秒钟。然后,第二次读取/proc/cpu。从新总数中减去旧用户+系统总数,并除以总计所有次数的变化。结果乘以100将其转换为百分比并打印。

答案 3 :(得分:0)

非常简单的脚本,仅考虑系统,空闲和用户。

相对于其他答案的好处是,它不需要实用程序,甚至不需要top,也可以显示分数,而当前的top答案不需要。

#!/bin/bash
read u1 s1 i1 <<< $(grep 'cpu ' /proc/stat | awk '{print $2" "$4" "$5}' )
sleep 1
read u2 s2 i2 <<< $(grep 'cpu ' /proc/stat | awk '{print $2" "$4" "$5}' )
u=$(echo "scale=4;$u2-$u1" | bc)
s=$(echo "scale=4;$s2-$s1" | bc)
i=$(echo "scale=4;$i2-$i1" | bc)
cpu=$(echo "scale=4;($u+$s)*100/($u+$s+$i)" | bc)
echo $cpu

简要说明-我们从以'cpu'开头的行中的/ proc / stat中提取数据。然后,我们解析出第二个令牌(用户时间),第四个令牌(系统时间)和第五个令牌(空闲时间)。

在这一点上,您可能会很想做数学,但是所有给您的就是自启动以来的利用率。我们还需要一个数据点。

我们睡眠1秒钟,然后再次从/ proc / stat中提取数据。现在我们得到第一次拉动和第二次拉动之间的区别。这是我们睡觉时那一秒钟的CPU利用率。

我们得到每个变量的差,然后对差进行数学运算。每次计算前都有一个奇怪的“ scale = 4”,它强制使用4位精度的浮点答案。