我想知道如何将处理器使用率的百分比从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
答案 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位精度的浮点答案。