shell指令碼之獲取CPU使用率
阿新 • • 發佈:2019-01-02
今天一個同事要測試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