1. 程式人生 > >linux伺服器記憶體監控-shell指令碼

linux伺服器記憶體監控-shell指令碼

前提:伺服器能上網際網路(ping),就可通過發郵件的方式來提醒管理員系統記憶體的使用情況。

第一步:安裝linux下面的一個郵件客戶端msmtp軟體(類似於一個foxmail的工具)

2、建立msmtp配置檔案和日誌檔案(host為郵件域名,郵件使用者名稱test,密碼******)
  # vim ~/.msmtprc

  1. account default   #賬戶名為預設
  2. host stmp.163.com   #郵件主機名稱
  3. from [email protected]   #自己的郵件伺服器地址
  4. auth login   #認證方式
  5. user test   #使用者名稱(因為是預設使用者)
  6. password ****** #自己郵件伺服器密碼  
  7. logfile ~/.msmtp.log  #郵件客戶端日誌檔案存放位置
 # chmod 600  ~/.msmtprc
 # > ~/.msmtp.log

3、安裝配置mutt(類似於郵件的資源管理器)

# vim ~/.muttrc

  1. set sendmail="/usr/local/msmtp/bin/msmtp"  #傳送郵件客戶端程式
  2. set use_from=yes
  3. set realname="memory"    #傳送郵件的使用者名稱
  4. set 
    from=[email protected]   #傳送郵件的伺服器地址
  5. set envelope_from=yes
  6. set rfc2047_parameters=yes
  7. set charset="utf-8"
4、郵件傳送測試(-s郵件標題,-a表加附件)
  # echo "郵件內容" | mutt -s "郵件標題測試郵件" [email protected]  -a /scripts/test.txt (注意:此處“-a 附件”要放到目標郵件的後面,否則會出現Can't stat [email protected]: No such file or directory
[email protected]
: unable to attach file.的錯誤!!!)

第二步、使用free命令監控系統記憶體:

 1、使用free命令檢視linux系統記憶體使用情況:(以M為單位)
  # free -m  (執行結果如下樣式)
               total       used       free     shared    buffers     cached
  Mem:          3952       3414        538          0        168        484
  -/+ buffers/cache:       2760       1191
  Swap:         8191         86       8105

  補充:個人理解,如有錯誤,歡迎指正。

  shared:多個執行緒公用的記憶體大小(已棄用,總是0)。

  -buffers/cache(已用):used-buffers-cached

  +buffers/cache(未用):free+buffers+cached

  A buffer is something that has yet to be "written" to disk.   A cache is something that has been "read" from the disk and stored for later use.   (buffer cache:塊裝置資料快取。    page cache:檔案資料的快取。)

 2、檢視擷取剩餘記憶體free的數值命令:
  (1) 實體記憶體free值: # free -m | grep Mem | awk '{print $4}'
  (2) 緩衝區的free值: # free -m | grep - | awk '{print $4}'
  (3) Swap分割槽free值: # free -m | grep Swap | awk '{print $4}'


 3、編寫記憶體監控的指令碼檔案:
  # vim /scripts/free-mem.sh

  1. #!/bin/bash  
  2. #使用free命令監控linux系統記憶體變化  
  3. #取系統當前時間(以追加的方式寫入檔案>>)  
  4. date >> /scripts/date-time.txt     
  5. #抓取實體記憶體free值(以追加的方式寫入檔案>>)  
  6. echo Mem-free: `free -m | grep Mem | awk '{print $4}'`M >> /scripts/mem-free.txt   
  7. #抓取緩衝區的free值(以追加的方式寫入檔案>>)  
  8. echo buffers/cache-free: `free -m | grep - | awk '{print $4}'`M  >> /scripts/buffers-free.txt  
  9. #抓取Swap分割槽free值(以追加的方式寫入檔案>>)  
  10. echo Swap-free: `free -m | grep Swap | awk '{print $4}'`M  >> /scripts/swap-free.txt  
  11. #逐行連線上面的時間和記憶體相關行資料(每次重新寫入檔案>)  
  12. paste  /scripts/date-time.txt /scripts/mem-free.txt  /scripts/buffers-free.txt   /scripts/swap-free.txt   > /scripts/freemem.txt  
 # chmod a+x /scripts/free-mem.sh
 # /scripts/free-mem.sh

 4、檢視記憶體監控的結果檔案:
 # cat /scripts/freemem.txt

 5、編寫free結果檔案郵件傳送指令碼:
# vim /scripts/sendmail-mem.sh

  1. #!/bin/bash  
  2. #把生成的freemem.txt檔案通過郵件傳送給使用者  
  3. #提取本伺服器的IP地址資訊  
  4. IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`  
  5. #提取當前日期時間  
  6. today=`date -d "0 day" +%Y年%m月%d日`  
  7. #傳送記憶體監控結果郵件  
  8. echo "這是$IP伺服器$today的記憶體監控報告,請下載附件。" | mutt -s "$IP伺服器$today記憶體監控報告" [email protected]-a /scripts/freemem.txt 

 # chmod a+x /scripts/sendmail-mem.sh

第三步、監控系統交換分割槽swap的情況,當使用超過80%的時候發告警郵件:
  # vim /scripts/swap-warning.sh

  1. #!/bin/bash  
  2. #提取本伺服器的IP地址資訊  
  3. IP=`ifconfig eth0 | grep "inet addr" | cut -f 2 -d ":" | cut -f 1 -d " "`  
  4. #系統分配的交換分割槽總量  
  5. swap_total=`free -m | grep Swap | awk '{print  $2}'`  
  6. #當前剩餘的交換分割槽free大小  
  7. swap_free=`free -m | grep Swap | awk '{print  $4}'`  
  8. #當前已使用的交換分割槽used大小  
  9. swap_used=`free -m | grep Swap | awk '{print  $3}'`  
  10. if (($swap_used != 0)); then  
  11. #如果交換分割槽已被使用,則計算當前剩餘交換分割槽free所佔總量的百分比,用小數來表示,要在小數點前面補一個整數位0  
  12. swap_per=0`echo "scale=2;$swap_free/$swap_total" | bc`  
  13. #設定交換分割槽的告警值為20%(即使用超過80%的時候告警)。  
  14. swap_warn=0.20  
  15. #當前剩餘交換分割槽百分比與告警值進行比較(當大於告警值(即剩餘20%以上)時會返回1,小於(即剩餘不足20%)時會返回0 )  
  16. swap_now=`expr $swap_per \< $swap_warn`  
  17. #如果當前交換分割槽使用超過80%(即剩餘小於20%,上面的返回值等於0),立即發郵件告警  
  18.   if (($swap_now == 1)); then  
  19.     echo "$IP伺服器swap交換分割槽只剩下 $swap_free M 未使用,剩餘不足20%,使用率已經超過80%,請及時處理。" | mutt -s "$IP 伺服器記憶體告警"  [email protected]  
  20.   fi  
  21. fi 

  # chmod a+x /scripts/swap-warning.sh
 

第四步、加入任務計劃:記憶體每十分鐘檢測一次,有告警則立即發郵件(十分鐘檢測一次),記憶體檢測結果郵件每天早上8點發一次

 # crontab -e

  1. */10 * * * *  /scripts/free-mem.sh  
  2. */10 * * * *  /scripts/swap-warning.sh  
  3. 0 8 * * *  /scripts/sendmail-mem.sh 

 # service crond restart

相關推薦

linux伺服器記憶體監控-shell指令碼

前提:伺服器能上網際網路(ping),就可通過發郵件的方式來提醒管理員系統記憶體的使用情況。 第一步:安裝linux下面的一個郵件客戶端msmtp軟體(類似於一個foxmail的工具) 2、建立msmtp配置檔案和日誌檔案(host為郵件域名,郵件使用者名稱tes

linux下效能監控shell指令碼實現系列一(伺服器整體效能監控

在實現監控指令碼前,我們先了解下一些已經成型的監控程式,比如大名鼎鼎的nmon。 nmon官網 http://nmon.sourceforge.net/pmwiki.php nmon使用簡單說明 http://www.ibm.com/developerworks/cn/ai

java實現Linux伺服器記憶體監控預警

1.需求場景 利用java程式監控Linux伺服器記憶體變化,根據設定的記憶體閾值發報警郵件 2.專案環境  普通java專案,jar形式 3.解決方法 (1)讀取Linux 記憶體監控檔案(/proc/meminfo),獲取記憶體資訊。 public static

Linux伺服器記憶體、CPU、檔案系統、磁碟IO效能以及網路連通性shell巡檢

shell自動巡檢伺服器基礎配置          每個專案都要部署在伺服器上,那麼伺服器的安全效能和一些基本情況是我們需要了解的,比如伺服器CPU、記憶體、檔案系統、磁碟IO、還有一些網路連通性

Linux系統監控shell指令碼

開源專案 #! /bin/bash # unset any variable which system may be using unset tecreset os architecture kernelrelease internalip external

8個非常實用的Linux系統監控shell指令碼

在伺服器運維過程中,經常需要對伺服器的各種資源進行監控,例如:CPU的負載監控,磁碟的使用率監控,程序數目監控等等,以在系統出現異常時及時報警,通知系統管理員。本文介紹在Linux系統下幾種常見的監控需求及其shell指令碼的編寫。 文章目錄: 1.Linux使用 S

Linux系統下編寫shell指令碼傳入引數列印系統當前執行緒數到指定檔案

  最近在做效能測試,要檢視系統執行過程中執行緒數,很簡單輸入命令:netstat -anp |grep java |wc -l,可以查詢。但是如何在執行過程定時列印系統執行緒數且將結果輸出到指定檔案呢?也很簡單我們直接寫一個shell指令碼執行下就可以了。以

Linux檢測記憶體洩露的指令碼

1.針對應用場景下的記憶體洩露 mm-leak-app.sh #!/bin/sh if [ $# -ne 1 ]; then echo "Usage: `basename $0` process_name" exit 1 fi APPNAME=$1 PR

Linux命令列與shell指令碼程式設計大全(二)

十一、處理使用者輸入 命令列引數 讀取引數: $0是程式名,$1是第一個引數,$2是第二個引數,以此類推,直到第9個引數$9。當引數個數超過10以後,需要在變數數字周圍加上花括號,如${10},如果輸入到命令列的引數是字串且含有空格,需要使用引號。 #! /bin/bash echo

Linux命令列與shell指令碼程式設計大全(一)

一、基本 bash shell命令 建立檔案 : touch 連結檔案:符號連結:是一個實實在在的檔案,兩個通過符號連結在一起的檔案,彼此的內容並不相同。使用ln -s命令。 硬連結:會建立獨立的虛擬檔案,其中包含了原始檔案的資訊及位置。但他們從根本上而言是同一個檔案。原始檔案必須事

Linux命令列與shell指令碼程式設計大全(三)

十二、呈現資料 輸入和輸出     標準檔案描述符                  0 STDIN 標準輸入   &n

Linux命令列與shell指令碼程式設計大全》讀書筆記————第三章 基本的bash shell命令

本章內容 1、使用shell 2、bash手冊 3、瀏覽檔案系統 4、檔案和目錄列表 5、管理檔案和目錄 6、檢視檔案內容   3.3 bash手冊 命令: man  xterm  作用:檢視檢視xterm使用者手冊 man命

Linux命令列與shell指令碼程式設計大全》讀書筆記————第一章 初識Linux shell

本章內容 1、什麼是Linux 2、Linux核心的組成   1、1 什麼是Linux Linux課劃分為以下四部分 a)Linux核心 b)GNU工具 c)圖形化桌面環境 d)應用軟體   1.1.1 深入探究Linux核心

linux編寫自啟動shell指令碼

1.需求分析    在很多情況下,程式設計師都做著重複枯燥的工作,雖然這些工作也是必須的,其實這些重複性的工作可以執行指令碼替代;今天筆者就如何編寫自啟動shell指令碼減少程式設計師開啟伺服器後的環境開啟工作; 2.配置環境 linux版本:centos-6.3

Linux(十)shell指令碼

一、shell定義: 使用者直接面對的不是計算機硬體而是shell。使用者將指令告訴shell,然後shell傳輸給系統核心。接著核心支配計算機硬體。 我們在Linux中輸入命令的介面就成為shell。 二、shell指令碼知識 2.1、開頭#!/bin/sh

通過Linux定時任務加shell指令碼檢測RabbitMQ消費者執行狀況以及自啟

目的:防止RabbitMQ消費者程序中斷影響業務 1、編寫 rabbitmq_consumer.php消費者檔案 (關於消費者和生產者請移步:https://blog.csdn.net/why444216978/article/details/84987011) 2、編寫she

詳解CentOS中定時執行釋放記憶體Shell指令碼及相關原理

本文由荒原之夢原創,原文連結:http://zhaokaifeng.com/?p=748 本文總體結構: 第一部分:本文中釋放系統記憶體的原理 第二部分:建立用於釋放記憶體的Shell指令碼並加入到系統定時任務 第三部分:詳細分析Shell指令碼中的每一條指令 第四部

Linux命令列與Shell指令碼程式設計大全(四)

一、建立函式 1.基本的指令碼函式 1.1 建立函式 function name { commands} 1.2 使用函式 在行中指定函式名就行了 ## 建立函式,注意函式名和大括號中間有空格,不然會報錯 function func1 { echo "

Linux MySQL資料庫備份shell指令碼

我們部署的伺服器常用是Linux系統。於是,為了保障資料安全,需要每隔一段時間,就對MySQL資料庫的資料進行備份。MySQL下的mysqldump命令,能讓我們有效的對想要的資料庫或者表進行備份。但由於這個操作具有間隔性和重複性,我們不可能每次手動去執行mysqldump命令來進行資料

Linux安裝JDK&Tomcat(shell指令碼)&軟體安裝之JDK&T

1.編寫installJdkTomcat.sh指令碼 #!/bin/bash myDir=`pwd` rpm -qa | gre