1. 程式人生 > >利用shell腳本監控linux中CPU利用率。

利用shell腳本監控linux中CPU利用率。

roc eight 等待 user 文件中 cpuinfo 參數 大小 printf

1、利用vmstat工具監控CPU信息。

vmstat 是 Linux系統監控工具,使用vmstat命令可以得到關於進程、內存、內存分頁、堵塞IO、traps及CPU活動的信息。

技術分享圖片

r:運行隊列中的進程數;b:等待IO的進程數。

swpd:已用虛擬內存大小(k);free:空閑內存大小;buff:已用緩沖大小;cache:已用緩存大小。

si:每秒從交換區寫入內存的大小(kb/s);so:每秒從內存寫入交換分區的大小。

bi:每秒讀取的塊數;bo每秒寫入的塊數。

in:每秒中斷數,包括時鐘中斷;cs:每秒上下文切換數。

us(user time):用戶進程執行消耗cpu時間;sy(system time):系統進程執行消耗cpu時間;id:空閑時間(包括IO等待時間);wa:等待IO時間。

代碼如下:

#!/bin/bash
#
CPU_us=$(vmstat | awk ‘{print $13}‘ | sed -n ‘$p‘)
CPU_sy=$(vmstat | awk ‘{print $14}‘ | sed -n ‘$p‘)
CPU_id=$(vmstat | awk ‘{print $15}‘ | sed -n ‘$p‘)
CPU_wa=$(vmstat | awk ‘{print $16}‘ | sed -n ‘$p‘)
CPU_st=$(vmstat | awk ‘{print $17}‘ | sed -n ‘$p‘)

echo -e "cpuinfo:\nus=$CPU_us\nsy=$CPU_sy\nid=$CPU_id\nwa=$CPU_wa\nst=$CPU_st"

2、基於/proc/stat計算CPU利用率進行監控報警並提取出占用cpu最高的前十進程。

/proc/stat:

這個文件包含了所有CPU活動的信息,該文件中的所有值都是從系統啟動開始累計到當前時刻。可以利用其中信息計算cpu的利用率。

技術分享圖片

每行每個參數的意思為(以第一行為例,單位:jiffies,1jiffies=0.01秒):

user(214):從系統啟動開始累計到當前時刻,用戶態的CPU時間,不包含 nice值為負進程。

nice(304):從系統啟動開始累計到當前時刻。

system(1906):從系統啟動開始累計到當前時刻,nice值為負的進程所占用的CPU時間。

idle(1296541):從系統啟動開始累計到當前時刻,除硬盤IO等待時間以外其它等待時間。

iowait(1620):從系統啟動開始累計到當前時刻,硬盤IO等待時間。

irq(5):從系統啟動開始累計到當前時刻,硬中斷時間。

softirq(457):從系統啟動開始累計到當前時刻,軟中斷時間。

CPU時間=user+nice+system+idle+iowait+irq+softirq。

CPU利用率=(idle2-idle1)/(cpu2-cpu1)*100。

ps aux:

顯示其他用戶啟動的進程(a)

查看系統中屬於自己的進程(x)

啟動這個進程的用戶和啟動時間 (u)

代碼如下:

#!/bin/bash
#
CPU1=`cat /proc/stat | grep ‘cpu ‘ | awk ‘{print $2" "$3" "$4" "$5" "$6" "$7" "$8}‘`
sleep 5
CPU2=`cat /proc/stat | grep ‘cpu ‘ | awk ‘{print $2" "$3" "$4" "$5" "$6" "$7" "$8}‘`
IDLE1=`echo $CPU1 | awk ‘{print $4}‘`
IDLE2=`echo $CPU2 | awk ‘{print $4}‘`
CPU1_TOTAL=`echo $CPU1 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}‘`
CPU2_TOTAL=`echo $CPU2 | awk ‘{print $1+$2+$3+$4+$5+$6+$7}‘`
IDLE=`echo "$IDLE2-$IDLE1" | bc`
CPU_TOTAL=`echo "$CPU2_TOTAL-$CPU1_TOTAL" | bc`
RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk ‘{printf "%.2f",$1}‘`
echo "CPU_RATE:${RATE}%"
CPU_RATE=`echo $RATE | cut -d. -f1`
if [ $CPU_RATE -ge 80 ]
then echo "CPU Warn"
ps aux | grep -v USER | sort -rn -k3 | head
else echo "It‘s OK"
fi

利用shell腳本監控linux中CPU利用率。