回覆列表
  • 1 # 林創雲

    1、利用vmstat工具監控CPU詳細資訊,然後基於/proc/stat計算CPU利用率進行監控,超過80報警並提取出佔用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時間。

    /proc/stat:

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

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

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

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

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

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

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

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

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

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

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

    ps aux:

    顯示其他使用者啟動的程序(a)

    檢視系統中屬於自己的程序(x)

    啟動這個程序的使用者和啟動時間 (u)

    程式碼如下:

    #!/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")

    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`

    #echo -e "IDLE2:$IDLE2\nIDLE1:$IDLE1\nCPU2:$CPU2_TOTAL\nCPU1:$CPU1_TOTAL"

    #echo -e "IDLE:$IDLE\nCPU:$CPU_TOTAL"

    RATE=`echo "scale=4;($CPU_TOTAL-$IDLE)/$CPU_TOTAL*100" | bc | awk "{printf "%.2f",$1}"`

    echo -e "us=$CPU_us\tsy=$CPU_sy\tid=$CPU_id\twa=$CPU_wa\tst=$CPU_st"

    echo "CPU_RATE:${RATE}%"

    CPU_RATE=`echo $RATE | cut -d. -f1`

    #echo "CPU_RATE:$CPU_RATE"

    if [ $CPU_RATE -ge 80 ]

    then echo "CPU Warn"

    ps aux | grep -v USER | sort -rn -k3 | head

    fi

    執行效果

    2、利用free工具監控記憶體利用率,超過80報警並提取出佔用記憶體最高的前十程序。

    程式碼如下:

    #!/bin/bash

    #

    total=$(free -m | sed -n "2p" | awk "{print $2}")

    used=$(free -m | sed -n "2p" | awk "{print $3}")

    free=$(free -m | sed -n "2p" | awk "{print $4}")

    shared=$(free -m | sed -n "2p" | awk "{print $5}")

    buff=$(free -m | sed -n "2p" | awk "{print $6}")

    cached=$(free -m | sed -n "2p" | awk "{print $7}")

    rate=`echo "scale=2;$used/$total" | bc | awk -F. "{print $2}"`

    echo -e "total\tused\tfree\tshared\tbuffer\tavailable"

    echo -e "${total}M\t${used}M\t${free}M\t${shared}M\t${buff}M\t${cached}M\nrate:${rate}%"

    if [ $rate -ge 80 ]

    then echo "Memory Warn"

    ps aux | grep -v USER | sort -rn -k4 | head

    fi

    執行效果

    3、利用df命令監控磁碟利用率,超過80報警。

    df :顯示磁碟分割槽上的可使用的磁碟空間。

      -h 以更易讀的方式顯示;

      -P 使用POSIX的輸出格式。

    #!/bin/bash

    #

    DEV=`df -hP | grep "^/dev/*" | cut -d" " -f1 | sort`

    for I in $DEV

    do dev=`df -Ph | grep $I | awk "{print $1}"`

    size=`df -Ph | grep $I | awk "{print $2}"`

    used=`df -Ph | grep $I | awk "{print $3}"`

    free=`df -Ph | grep $I | awk "{print $4}"`

    rate=`df -Ph | grep $I | awk "{print $5}"`

    mount=`df -Ph | grep $I | awk "{print $6}"`

    echo -e "$I:\tsize:$size\tused:$used\tfree:$free\trate:$rate\tmount:$mount"

    F=`echo $rate | awk -F% "{print $1}"`

    if [ $F -ge 80 ];then

    echo "$mount Warn"

    else echo "It"s OK"

    fi

    done

    執行效果

    CPU物理資訊

    檢視物理cpu個數:

      cat /proc/cpuinfo | grep "physical id" | uniq | wc -l

    檢視cpu核數:

      cat /proc/cpuinfo | grep "cpu cores" | uniq

    檢視邏輯cpu個數:

      cat /proc/cpuinfo | grep "processor" | wc -l

  • 中秋節和大豐收的關聯?
  • 四字詞語最後一個是舉是什麼成語?