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

Fil*_*lva 6 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
Run Code Online (Sandbox Code Playgroud)

Dav*_*ica 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
Run Code Online (Sandbox Code Playgroud)

使用/输出:

$ bash procstat-cpu.sh
 Current CPU Utilization : 10
Run Code Online (Sandbox Code Playgroud)

输出超过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
Run Code Online (Sandbox Code Playgroud)


Joh*_*024 7

为了在启动系统后获得总使用百分比:

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

说明

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

cpu 3357 0 4313 1362393以USER_HZ
为单位的时间量(大多数体系结构的1/100秒,使用sysconf(_SC_CLK_TCK)获取正确的值),系统在用户模式下花费的时间,用户模式为低优先级(nice),系统模式和空闲任务.最后一个值应为USER_HZ乘以uptime伪文件中的第二个条目.

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

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

awk '/cpu /{print 100*($2+$4)/($2+$4+$5)}' /proc/stat
Run Code Online (Sandbox Code Playgroud)

通过要求线匹配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
Run Code Online (Sandbox Code Playgroud)

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


小智 7

top -bn1 | sed -n '/Cpu/p'
Run Code Online (Sandbox Code Playgroud)

给出以下行

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
Run Code Online (Sandbox Code Playgroud)

您可以通过以下方式拉取任何CPU字段将用户 CPU(我们)

top -bn1 | sed -n '/Cpu/p' | awk '{print $2}' | sed 's/..,//'
Run Code Online (Sandbox Code Playgroud)

输出:

15.4%
Run Code Online (Sandbox Code Playgroud)

如果你想要另一个字段,如系统 CPU(sy),你可以从$ 2更改awk字段,

top -bn1 | sed -n '/Cpu/p' | awk '{print $3}' | sed 's/..,//'
Run Code Online (Sandbox Code Playgroud)

输出:

5.3%
Run Code Online (Sandbox Code Playgroud)

如果你想要其他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.
Run Code Online (Sandbox Code Playgroud)