从网上找的脚本。现在在学习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