1. 程式人生 > >shell指令碼之獲取CPU使用率

shell指令碼之獲取CPU使用率

今天一個同事要測試OJ專案,同時我這邊也需要知道他在壓測過程中, CPU的使用率怎麼樣,雖說可以用top實時檢視,但是程序太多了,我不需要獲取那麼多資訊,我僅僅只要知道當前壓測過程中CPU實時的使用率是多少,然後根據這個使用率,當達到一定的使用率時,我後臺呼叫對應的介面開啟伺服器,將負載轉移到另外一臺伺服器上。這算是一種動態的負載均衡或者用一句名詞來說,這就是彈性伸縮的一種體現。

將下面cpu.sh 加入crontab中每秒或者每分鐘定時執行,同時你還需要建立對應的日誌檔案,因為有助於你實時檢視。

cpu.sh

#!/bin/sh
#
#指令碼功能描述:依據/proc/stat檔案獲取並計算CPU使用率
#
#CPU時間計算公式:CPU_TIME=user+system+nice+idle+iowait+irq+softirq
#CPU使用率計算公式:cpu_usage=(idle2-idle1)/(cpu2-cpu1)*100
#預設時間間隔
TIME_INTERVAL=5
time=$(date "+%Y-%m-%d %H:%M:%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_TOTAL_CPU_T=$(echo $LAST_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')
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_TOTAL_CPU_T=$(echo $NEXT_CPU_INFO | awk '{print $1+$2+$3+$4+$5+$6+$7}')

#系統空閒時間
SYSTEM_IDLE=`echo ${NEXT_SYS_IDLE} ${LAST_SYS_IDLE} | awk '{print $1-$2}'`
#CPU總時間
TOTAL_TIME=`echo ${NEXT_TOTAL_CPU_T} ${LAST_TOTAL_CPU_T} | awk '{print $1-$2}'`
CPU_USAGE=`echo ${SYSTEM_IDLE} ${TOTAL_TIME} | awk '{printf "%.2f", 100-$1/$2*100}'`

echo "CPU Usage:${CPU_USAGE}%"$time >> /home/youcong/cpu.log