1. 程式人生 > >利用shell指令碼監控linux中CPU、記憶體和磁碟利用率。(centos7)

利用shell指令碼監控linux中CPU、記憶體和磁碟利用率。(centos7)

  這篇部落格中所寫的,在實際工作中並沒有什麼卵用,工作中並不會用到這種指令碼去監控。不過自己寫一遍,可以讓初學者對CPU、記憶體、磁碟等一些基礎知識和基礎命令更加了解。

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

相關推薦

利用shell指令碼監控linuxCPU記憶體磁碟利用率centos7

  這篇部落格中所寫的,在實際工作中並沒有什麼卵用,工作中並不會用到這種指令碼去監控。不過自己寫一遍,可以讓初學者對CPU、記憶體、磁碟等一些基礎知識和基礎命令更加了解。 1、利用vmstat工具監控CPU詳細資訊,然後基於/proc/stat計算CPU利用率進行監控,超過80報警並提取出佔用cpu最高的前十

Shell指令碼監控CPU記憶體硬碟利用率

轉:http://blog.51cto.com/lizhenliang/1610415 1、監控CPU利用率(通過vmstat工具)      #!/bin/bash #==================================================== # Author: lizh

jmeter學習------監控linuxcpu記憶體網路等資源佔用曲線圖

需求: 1、瞭解系統執行的機器的資源佔用情況 2、使用jmeter監控機器上的cpu、記憶體、網路等資源佔用曲線圖 3、從資源佔用曲線圖中-預測系統併發量、資料處理量的能力 步驟: 1、這裡使用apache-jmeter-3.1版本 2、加入plugins外掛:

Linux用戶權限管理

linux用戶、組使用Linux是一個Multi-tasks(多任務)、 Multi-Users(多用戶)的系統每一個登陸者或使用者都有用戶標識、密碼(所謂3A) 所謂的3A: Authentication(驗證機制) Authorization(授權機制) Audition(審計)組的概

Ubuntu16下檢視CPU記憶體磁碟相關資訊

1.記憶體 檢視記憶體#free -m total used free shared buff/cache available Mem: 96685 986 94887

java 併發 volitilesynchronizedlock的比較

1、volitile和(synchronnized、lock)        首先比較volitile和synchronnized,volitile執行緒不安全,但是synchronized則是執行緒安全的。        volitile修飾的變數主要作用讓變數的改變立即寫

利用shell腳本監控linuxCPU利用率

roc eight 等待 user 文件中 cpuinfo 參數 大小 printf 1、利用vmstat工具監控CPU信息。 vmstat 是 Linux系統監控工具,使用vmstat命令可以得到關於進程、內存、內存分頁、堵塞IO、traps及CPU活動的信息。 r:運

監控linuxCPU 記憶體 磁碟資料的shell指令碼(圖文)

# 伺服器CPU/MEM/DISK監控指令碼(server_moniter.sh)  #------------------------------------------------------------------  # 對伺服器的CPU/MEM/DISK設定閾值,動態監控利用率,超過閾值傳送郵件 

利用shell指令碼監控redis的使用記憶體

前些天搭建的redis叢集終於在生產環境使用了,為了系統的穩定,研究了下redis的監控報警。 雖然之前搭建了RedisLive,可以實時檢視redis的資訊,但是做不到實時的簡訊報警監控。 目前只針

java遠端監控Linux主機CPU記憶體程式碼實現

對於遠端監控Linux主機系統CPU,記憶體使用情況,以前也使用了top等命令,但是最後還是覺得使用vmstat比較好. 執行top命令獲得系統CPU使用情況有兩個缺點, 第一執行top命令,執行的shell語句相對複雜. 用top命令獲得CPU使用情況的shell語句 t

Linux學習筆記RHEL 7十三--Linuxsusu -sudo的區別

su 切換到root使用者,但是並沒有轉到root使用者家目錄下,即沒有改變使用者的環境。 su - 切換到root使用者,並轉到root使用者的家目錄下,即改變到了root使用者的環境。 這個涉及到不同使用者下的環境變數的配置。 sudo 通過sudo,我們能把

LinuxCPU記憶體效能監測

在系統維護的過程中,隨時可能有需要檢視 CPU 使用率記憶體使用情況的需要,尤其是涉及到JVM,程式調優的情況,並根據相應資訊分析系統狀況的需要。 top命令 top命令是Linux下常用的效能分析工

linux系統cpu記憶體磁碟IO異常查詢方式彙總

對linux系統中cpu、記憶體、磁碟IO異常定位的方式進行梳理總結如下: 1、先記錄下基本的cpu資訊查詢方式: # 總核數 = 物理CPU個數 X 每顆物理CPU的核數 # 總邏輯CPU數 = 物理CPU個數 X 每顆物理CPU的核數 X 超執行緒數 # 檢視物理CP

Linux新增修改刪除使用者使用者組

一、使用者:在建立使用者時,需要為新建使用者指定一使用者組,如果不指定其使用者所屬的工作組,自動會生成一個與使用者名稱同名的工作組。建立使用者user1的時候指定其所屬工作組users,例:useradd –g users user11、使用命令 useradd 建立使用者例

linux下檢視cpu記憶體硬碟大小

轉載至:http://blog.sina.com.cn/s/blog_535aa0930100ltz8.html 查cpu #dmesg |grep -i xeon CPU0: Intel(R) Xeon(R) CPU           E5520  @ 2.27G

Linux按照CPU記憶體磁碟IO網路效能監測(強烈推薦)

系統優化是一項複雜、繁瑣、長期的工作,優化前需要監測、採集、測試、評估,優化後也需要測試、採集、評估、監測,而且是一個長期和持續的過程,不 是說現在優化了,測試了,以後就可以一勞永逸了,也不是說書本上的優化就適合眼下正在執行的系統,不同的系統、不同的硬體、不同的應用優化的重

Linuxpushdpopddirs

1、dirs 1)功能不帶引數的dirs命令顯示當前目錄棧中的記錄2)語法(1)格式:dirs  [-clpv]  [+n]  [-n](2)選項-c    刪除目錄棧中的所有記錄-l     以完整格式顯示-p    一個目錄一行的方式顯示-v    每行一個目錄來顯

Linux下檢視CPU記憶體硬碟型號及相關資訊命令

smartctl version 5.33 [i386-redhat-linux-gnu] Copyright (C) 2002-4 Bruce Allen Home page is http://smartmontools.sourceforge.net/ === START OF INFORMATION

linux必備常用支持庫的安裝CentOS

支持 rac pen jpeg nbsp linux中 div sta linux 在CentOS安裝軟件的時候,可能缺少一部分支持庫,而報錯。這裏首先安裝系統常用的支持庫。那麽在安裝的時候就會減少很多的錯誤的出現 yum install -y gcc gdb str

給出字串分別計算出字串數字大小寫字母的個數兩種方法 getBytes( ) charAt( )

public class LetterAndNumberCount { public static void main(String[] args) { Count("FJJgjsgfsd543632"); count1("SFsefgdg2354354fsdf"