Linux實用監(jiān)控腳本——使用 Shell 檢測進(jìn)程 CPU 利用率
在對應(yīng)用服務(wù)進(jìn)行維護(hù)時,我們經(jīng)常遇到由于 CPU 過高導(dǎo)致業(yè)務(wù)阻塞,造成業(yè)務(wù)中斷的情況。CPU 過高可能由于業(yè)務(wù)量過負(fù)荷或者出現(xiàn)死循環(huán)等異常情況,通過腳本對業(yè)務(wù)進(jìn)程 CPU 進(jìn)行時時監(jiān)控,可以在 CPU 利用率異常時及時通知維護(hù)人員,便于維護(hù)人員及時分析,定位,以及避免業(yè)務(wù)中斷。
下面的函數(shù)可獲得指定進(jìn)程 ID 的進(jìn)程 CPU 利用率。它有一個參數(shù)為進(jìn)程 ID,它首先使用 ps 查找進(jìn)程信息,同時通過「grep -v」過濾掉「%CPU」行,最后通過 awk 查找 CPU 利用百分比的整數(shù)部分(如果系統(tǒng)中有多個 CPU,CPU 利用率可以超過 100%)。
對業(yè)務(wù)進(jìn)程 CPU 進(jìn)行實時監(jiān)控
- function GetCpu
- {
- CpuValue=`ps -p $1 -o pcpu |grep -v CPU | awk '{print $1}' | awk - F. '{print $1}'`
- echo $CpuValue
- }
下面的功能是通過上面的函數(shù) GetCpu 獲得此進(jìn)程的 CPU 利用率,然后通過條件語句判斷 CPU 利用率是否超過限制,如果超過 80%(可以根據(jù)實際情況進(jìn)行調(diào)整),則輸出告警,否則輸出正常信息。
判斷 CPU 利用率是否超過限制
- function CheckCpu
- {
- PID=$1
- cpu=`GetCpu $PID`
- if [ $cpu -gt 80 ]
- then
- {
- echo “The usage of cpu is larger than 80%”
- }
- else
- {
- echo “The usage of cpu is normal”
- }
- fi
- }
示例演示:
(1) 源程序(假設(shè)上面已經(jīng)查詢出 TestApp 的進(jìn)程 ID 為 11426)
- CheckCpu 11426
(2) 結(jié)果輸出
- The usage of cpu is 75
- The usage of cpu is normal
- [dyu@xilinuxbldsrv shell]$
(3) 結(jié)果分析
從上面的輸出可見:TestApp 程序當(dāng)前的 CPU 使用為 75%,是正常的,沒有超過 80% 的告警限制。
作為 IT 運維工程師,對單個進(jìn)程CPU利用率設(shè)置監(jiān)控告警可以在一定程度上降低系統(tǒng)異常,保障業(yè)務(wù)穩(wěn)定的運行。試想,如果擁有一個能夠監(jiān)控全局,實現(xiàn)業(yè)務(wù)告警風(fēng)險提醒的運維協(xié)作工具呢?定能極大提升工作效率,加強團(tuán)隊運維保障能力!