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)
处理器使用或使用是一段时间内的衡量标准.测量利用率的一种方法%是通过计算两次连续读取/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)
为了在启动系统后获得总使用百分比:
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)
| 归档时间: |
|
| 查看次数: |
8261 次 |
| 最近记录: |