LINUX 根據 /proc/stat 文件計算cpu使用率的shell腳本

#!/bin/sh
#腳本功能描述:依據/proc/stat文件獲取並計算CPU使用率
#CPU時間計算公式:CPU_TIME=user+system+nice+idle+iowait+irq+softirq
#CPU使用率計算公式:cpu_usage=[(user_2 +sys_2+nice_2) - (user_1 + sys_1+nice_1)]/(total_2 - total_1)*100
#默認時間間隔
TIME_INTERVAL=5
time=$(date "+%s")
LAST_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
LAST_SYS_IDLE=$(echo $LAST_CPU_INFO | awk '{print $4}')
LAST_USER_BUSY=$(echo $LAST_CPU_INFO | awk '{print $1}')
LAST_SYS_BUSY=$(echo $LAST_CPU_INFO | awk '{print $3}')
LAST_TOTAL_CPU_T=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')
LAST_CPU_USAGE=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3}')
sleep ${TIME_INTERVAL}
NEXT_CPU_INFO=$(cat /proc/stat | grep -w cpu | awk '{print $2,$3,$4,$5,$6,$7,$8}')
NEXT_SYS_IDLE=$(echo $NEXT_CPU_INFO | awk '{print $4}')
NEXT_USER_BUSY=$(echo $NEXT_CPU_INFO | awk '{print $1}')
NEXT_SYS_BUSY=$(echo $NEXT_CPU_INFO | awk '{print $3}')
NEXT_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')
NExT_CPU_USAGE=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3}')

#系統空閒時間
SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE} | awk '{print $1-$2}'`
#系統使用時間
SYSTEM_BUSY=`echo ${NEXT_SYS_BUSY} ${LAST_SYS_BUSY} | awk '{print $1-$2}'`
#用戶使用時間
USER_BUSY=`echo ${NEXT_USER_BUSY} ${LAST_USER_BUSY} | awk '{print $1-$2}'`
#用戶+系統+nice時間
TOTAL_BUSY=`echo ${NExT_CPU_USAGE} ${LAST_CPU_USAGE} | awk '{print $1-$2}'`
#CPU總時間
TOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T} | awk '{print $1-$2}'`

#CPU總時間百分比
CPU_USAGE=`echo ${TOTAL_BUSY} ${TOTAL_TIME} | awk '{printf "%.2f", $1/$2*100}'`
#用戶時間百分比
CPU_USER_USAGE=`echo ${USER_BUSY} ${TOTAL_TIME}|awk '{printf "%.2f", $1/$2*100}'`
#系統時間百分比
CPU_sys_USAGE=`echo ${SYSTEM_BUSY} ${TOTAL_TIME} |awk '{printf "%.2f", $1/$2*100}'`

echo  "CPU Usage:${CPU_USAGE}%" $time
echo  "CPU UserUsage:${CPU_USER_USAGE}%" $time
echo  "CPU SysUsage:${CPU_sys_USAGE}%" $time
相關文章
相關標籤/搜索