Linux下的CPU利用率计算原理及实现

总的Cpu使用率计算计算方法:

1、  采样两个足够短的时间间隔的Cpu快照,分别记作t1,t2,其中t1、t2的结构均为:

(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;

2、  计算总的Cpu时间片totalCpuTime

a)         把第一次的所有cpu使用情况求和,得到s1;

b)         把第二次的所有cpu使用情况求和,得到s2;

c)         s2 - s1得到这个时间间隔内的所有时间片,即totalCpuTime = j2 - j1 ;

3、计算空闲时间idle

idle对应第四列的数据,用第二次的第四列 - 第一次的第四列即可

idle=第二次的第四列 - 第一次的第四列

6、计算cpu使用率

pcpu =100* (total-idle)/total

实现:(Bash脚本)

#!/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 " "$9 " "$10}')  
SYS_IDLE_1=$(echo $CPULOG_1 | awk '{print $4}')  
Total_1=$(echo $CPULOG_1 | awk '{print $1+$2+$3+$4+$5+$6+$7+$8+$9}')  
 
sleep 5  
 
CPULOG_2=$(cat /proc/stat | grep 'cpu ' | awk '{print $2" "$3" "$4" "$5" "$6" "$7" "$8 " "$9 " "$10 }')  
SYS_IDLE_2=$(echo $CPULOG_2 | awk '{print $4}')  
Total_2=$(echo $CPULOG_2 | awk '{print $1+$2+$3+$4+$5+$6+$7+$8+$9}')  
 
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% 

参考文章:

http://www.blogjava.net/fjzag/articles/317773.html

http://server.51cto.com/sCollege-188250.htm

猜你喜欢

转载自meigesir.iteye.com/blog/2051862