从网上找的脚本。现在在学习shell脚本的编写,又对脚本进行分析注释了一下
1、shell脚本:
#!/bin/sh
##echo user nice system idle iowait irq softirq
CPULOG_1=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
SYS_IDLE_1=$(echo $CPULOG_1 | awk '{print $4}')
Total_1=$(echo $CPULOG_1 | awk '{print $1+$2+$3+$4+$5+$6+$7}')
sleep 5
CPULOG_2=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
SYS_IDLE_2=$(echo $CPULOG_2 | awk '{print $4}')
Total_2=$(echo $CPULOG_2 | awk '{print $1+$2+$3+$4+$5+$6+$7}')
SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`
Total=`expr $Total_2 - $Total_1`
SYS_USAGE=`expr $SYS_IDLE/$Total*100 |bc -l`
SYS_Rate=`expr 100-$SYS_USAGE |bc -l`
Disp_SYS_Rate=`expr "scale=3; $SYS_Rate/1" |bc`
echo $Disp_SYS_Rate%
2、对shell脚本添加注释:
#!/bin/sh
##echo user nice system idle iowait irq softirq
CPULOG_1=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
## cat /proc/stat :显示出文件stat(CPU时间的分配信息保存在/proc/stat文件中,包括用户态,系统态,空闲态的时间)
## grep 'cpu ':过滤出CPU总的使用情况
## awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}'):打印出2——8列对应的时间
SYS_IDLE_1=$(echo $CPULOG_1 | awk '{print $4}')
## 将CPULOG_1中的第四列的值赋给SYS_IDLE_1
Total_1=$(echo $CPULOG_1 | awk '{print $1+$2+$3+$4+$5+$6+$7}')
## 将CPULOG_1中的第1——7列的值相加后的值赋给Total_1
sleep 5
## 等5秒钟
CPULOG_2=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8}')
SYS_IDLE_2=$(echo $CPULOG_2 | awk '{print $4}')
Total_2=$(echo $CPULOG_2 | awk '{print $1+$2+$3+$4+$5+$6+$7}')
SYS_IDLE=`expr $SYS_IDLE_2 - $SYS_IDLE_1`
## 将表达式$SYS_IDLE_2 - $SYS_IDLE_1相减的结果赋给SYS_IDLE,即空闲的总时间
Total=`expr $Total_2 - $Total_1`
## 将表达式$Total_2 - $Total_1相减的结果赋给Total,即总的使用时间
SYS_USAGE=`expr $SYS_IDLE/$Total*100 |bc -l`
## expr $SYS_IDLE/$Total*100:空闲时间的表达式
## bc -l : 是将前面的表达式的结果计算出来并已标准的数学函数输出
SYS_Rate=`expr 100-$SYS_USAGE |bc -l`
## 计算出使用时间
Disp_SYS_Rate=`expr "scale=3; $SYS_Rate/1" |bc`
## 计算出的使用率结果保留3位小数点
echo $Disp_SYS_Rate%
## 将使用率结果输出到终端
3、cpu 使用率的计算分析: cat /proc/stat
有以上信息可以得出 cpu是4核的,cpu这项对应信息如下
cpu user nice system idle iowait irq softirq steal guest guest_nice
user:用户态的CPU时间
nice:低优先级程序所占用的用户态的cpu时间。
system:系统态的CPU时间
idle:CPU空闲的时间(不包含IO等待)
iowait:等待IO响应的时间
irq:处理硬件中断的时间
softirq:处理软中断的时间
steal:其他系统所花的时间(个人理解是针对虚拟机)
guest:运行时间为客户操作系统下的虚拟CPU控制(个人理解是访客控制CPU的时间)
guest_nice:低优先级程序所占用的用户态的cpu时间。(访客的)
具体详情可以参考 https://www.cnblogs.com/li-hao/archive/2013/03/19/2970056.html