linux统计cpu剩余百分比,准确计算Linux中以百分比给出的CPU使用率?

以下是基于Vangelis答案的bash脚本 . 它产生如下输出:

total 49.1803

cpu0 14.2857

cpu1 100

cpu2 28.5714

cpu3 100

cpu4 30

cpu5 25

创建一个名为 get_cpu_usage.sh 的文件

使用以下命令运行它: bash get_cpu_usage.sh 0.2

参数是要测量的秒数 . 在这种情况下,它是200毫秒 .

内容如下:

#!/bin/sh

sleepDurationSeconds=$1

previousDate=$(date +%s%N | cut -b1-13)

previousStats=$(cat /proc/stat)

sleep $sleepDurationSeconds

currentDate=$(date +%s%N | cut -b1-13)

currentStats=$(cat /proc/stat)

cpus=$(echo "$currentStats" | grep -P 'cpu' | awk -F " " '{print $1}')

for cpu in $cpus

do

currentLine=$(echo "$currentStats" | grep "$cpu ")

user=$(echo "$currentLine" | awk -F " " '{print $2}')

nice=$(echo "$currentLine" | awk -F " " '{print $3}')

system=$(echo "$currentLine" | awk -F " " '{print $4}')

idle=$(echo "$currentLine" | awk -F " " '{print $5}')

iowait=$(echo "$currentLine" | awk -F " " '{print $6}')

irq=$(echo "$currentLine" | awk -F " " '{print $7}')

softirq=$(echo "$currentLine" | awk -F " " '{print $8}')

steal=$(echo "$currentLine" | awk -F " " '{print $9}')

guest=$(echo "$currentLine" | awk -F " " '{print $10}')

guest_nice=$(echo "$currentLine" | awk -F " " '{print $11}')

previousLine=$(echo "$previousStats" | grep "$cpu ")

prevuser=$(echo "$previousLine" | awk -F " " '{print $2}')

prevnice=$(echo "$previousLine" | awk -F " " '{print $3}')

prevsystem=$(echo "$previousLine" | awk -F " " '{print $4}')

previdle=$(echo "$previousLine" | awk -F " " '{print $5}')

previowait=$(echo "$previousLine" | awk -F " " '{print $6}')

previrq=$(echo "$previousLine" | awk -F " " '{print $7}')

prevsoftirq=$(echo "$previousLine" | awk -F " " '{print $8}')

prevsteal=$(echo "$previousLine" | awk -F " " '{print $9}')

prevguest=$(echo "$previousLine" | awk -F " " '{print $10}')

prevguest_nice=$(echo "$previousLine" | awk -F " " '{print $11}')

PrevIdle=$((previdle + previowait))

Idle=$((idle + iowait))

PrevNonIdle=$((prevuser + prevnice + prevsystem + previrq + prevsoftirq + prevsteal))

NonIdle=$((user + nice + system + irq + softirq + steal))

PrevTotal=$((PrevIdle + PrevNonIdle))

Total=$((Idle + NonIdle))

totald=$((Total - PrevTotal))

idled=$((Idle - PrevIdle))

CPU_Percentage=$(awk "BEGIN {print ($totald - $idled)/$totald*100}")

if [[ "$cpu" == "cpu" ]]; then

echo "total "$CPU_Percentage

else

echo $cpu" "$CPU_Percentage

fi

done

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值