linux伺服器性能(網卡流量、CPU、記憶體、磁碟使用率)監控

来源:http://www.cnblogs.com/zishengY/archive/2017/05/07/6819606.html
-Advertisement-
Play Games

廣義的網站的監控涵蓋所有的非業務行為的數據採集與管理,包括數據分析師和產品設計師使用的網站用戶行為日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。 本文主要是通過shell腳本來收集伺服器性能指標,如系統load、記憶體占用、磁碟IO、CPU占用,並將其寫入一個文件中,及時判斷應 ...


  轉載請註明:http://www.cnblogs.com/zishengY/p/6819606.html 

  廣義的網站的監控涵蓋所有的非業務行為的數據採集與管理,包括數據分析師和產品設計師使用的網站用戶行為日誌、業務運行數據,以及供運維工程師和開發工程師使用的性能統計數據等。

     本文主要是通過shell腳本來收集伺服器性能指標,如系統load、記憶體占用、磁碟IO、CPU占用,並將其寫入一個文件中,及時判斷應用情況,防患於未然 。

  實現步驟如下:

  第一步:編寫shell腳本,如下:

    vim check.sh,添加下麵腳本之後保存

  1 #!/bin/bash
  2 #這個腳本使用來統計CPU、磁碟、記憶體使用率、帶寬的
  3 #初始化一些下麵用到的變數
  4 total=0
  5 system=0
  6 user=0
  7 i=0
  8 
  9 time=`date "+%Y-%m-%d %k:%M"`
 10 day=`date "+%Y-%m-%d"`
 11 minute=`date "+%k:%M"`
 12 echo  "*************************************************************************" >> 123.txt
 13 echo "統計開始時間:$day $minute" >> 123.txt
 14 
 15 #帶寬使用情況
 16 echo "#帶寬的使用情況:#" >>123.txt
 17 #迴圈五次,避免看到的是偶然的數據
 18 while (( $i<5 ))
 19 do
 20 #原先的`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`方式獲取網卡的信息為空,已經註釋掉
 21 #rx_before=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
 22 #tx_before=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
 23 rx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
 24 tx_before=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
 25 #休眠2s
 26 sleep 2
 27 #用sed先獲取第7列,再用awk獲取第2列,再cut切割,從第7個到最後,即只切割網卡流量數字部分
 28 #rx_after=`ifconfig eth0|sed -n "7p"|awk '{print $2}'|cut -c7-`
 29 #tx_after=`ifconfig eth0|sed -n "7p"|awk '{print $6}'|cut -c7-`
 30 rx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $2}')
 31 tx_after=$(cat /proc/net/dev | grep 'eth' | tr : " " | awk '{print $10}')
 32 #註意下麵截取的相差2秒的兩個時刻的累計和發送的bytes(即累計傳送和接受的位)
 33 rx_result=$[(rx_after-rx_before)/1024/1024/2*8]
 34 tx_result=$[(tx_after-tx_before)/1024/1024/2*8]
 35 echo  "$time Now_In_Speed: $rx_result Mbps Now_OUt_Speed: $tx_result Mbps" >>123.txt
 36 let "i++"
 37 done
 38 #註意下麵grep後面的$time變數要用雙引號括起來
 39 rx_result=$(cat 123.txt|grep "$time"|awk '{In+=$4}END{print In}')
 40 tx_result=$(cat 123.txt|grep "$time"|awk '{Out+=$7}END{print Out}')
 41 In_Speed=$(echo "scale=2;$rx_result/5"|bc)
 42 Out_Speed=$(echo "scale=2;$tx_result/5"|bc)
 43 #echo "#帶寬的5次的平均值是:#" >>123.txt
 44 echo  "$time In_Speed_average: $In_Speed Mbps Out_Speed_average: $Out_Speed Mbps" >>123.txt
 45 
 46 
 47 #CPU使用情況
 48 #使用vmstat 1 5命令統計5秒內的使用情況,再計算每秒使用情況
 49 which sar > /dev/null 2>&1
 50 if [ $? -ne 0 ]
 51 then
 52   total=`vmstat 1 5|awk '{x+=$13;y+=$14}END{print x+y}'`
 53   average=$(echo "scale=2;$total/5"|bc)
 54 fi
 55 echo "#CPU使用率:#" >>123.txt
 56 echo "Total CPU  is already use: $average%" >>123.txt
 57 
 58 
 59 #磁碟使用情況(註意:需要用sed先進行格式化才能進行累加處理)
 60 disk_used=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{used+=$3} END{print used}')
 61 disk_totalSpace=$(df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{totalSpace+=$2} END{print totalSpace}')
 62 disk_all=$(echo "scale=4;$disk_used/$disk_totalSpace" | bc)
 63 disk_percent1=$(echo $disk_all | cut -c 2-3)
 64 disk_percent2=$(echo $disk_all | cut -c 4-5)
 65 disk_warning=`df -m | sed '1d;/ /!N;s/\n//;s/ \+/ /;' | awk '{if ($5>85) print $5 $6;} '`
 66 echo "#磁碟利用率#" >>123.txt
 67 echo "hard disk has used: $disk_percent1.$disk_percent2%" >>123.txt
 68 #echo -e "\t\t.." 表示換行
 69 echo -e "\t\t#磁碟存在目錄使用率超過85%報警#" >>123.txt
 70 echo -e "\t\tover used: $disk_warning" >>123.txt
 71 
 72 
 73 #記憶體使用情況
 74 #獲得系統總記憶體
 75 memery_all=$(free -m | awk 'NR==2' | awk '{print $2}')
 76 #獲得占用記憶體(操作系統 角度)
 77 system _memery_used =$(free -m | awk 'NR==2' | awk '{print $3}')
 78 #獲得buffer、cache占用記憶體,當記憶體不夠時會及時回收,所以這兩部分可用於可用記憶體的計算
 79 buffer_used=$(free -m | awk 'NR==2' | awk '{print $6}')
 80 cache_used=$(free -m | awk 'NR==2' | awk '{print $7}')
 81 #獲得被使用記憶體,所以這部分可用於可用記憶體的計算,註意計算方法
 82 actual_used_all =$[memery_all-(free+buffer_used+cache_used)]
 83 #獲得實際占用的記憶體
 84 actual_used_all=`expr $memery_all - $free + $buffer_used + $cache_used `
 85 echo "$used_all" >> 123.txt
 86 memery_percent=$(echo "scale=4;$system _memery_used / $memery_all" | bc)
 87 memery_percent2=$(echo "scale=4; $actual_used_all / $memery_all" | bc)
 88 percent_part1=$(echo $memery_percent | cut -c 2-3)
 89 percent_part2=$(echo $memery_percent | cut -c 4-5)
 90 percent_part11=$(echo $memery_percent2 | cut -c 2-3)
 91 percent_part22=$(echo $memery_percent2 | cut -c 4-5)
 92 echo "#記憶體使用率#" >> 123.txt
 93 #獲得占用記憶體(操作系統角度)
 94 echo "system memery is already use: $percent_part1.$percent_part2%" >>123.txt
 95 #獲得實際記憶體占用率
 96 echo "actual memery is already use: $percent_part11.$percent_part22%" >>123.txt
 97 echo "buffer is already used : $buffer_used M" >>123.txt
 98 echo "cache is already used : $cache_used M" >>123.txt
 99 
100 
101 echo  "結束本次統計:$day $minute" >> 123.txt
102 echo  "*************************************************************************" >> 123.txt
103 echo -e "\n\n\n\n" >> 123.txt
 第二步:創建shell腳本中用到的文件123.txt
    touch 123.txt
 第三步:給check.sh和123.txt授予所有許可權
  chmod 777 check.sh
  chmod 777 123.txt

  第四步:執行check.sh腳本

    ./check.sh

  第五步:查看執行寫入文件的情況

出現這信息表名腳本成功運行實時統計情況。

 

若是想使用定時任務,可使用crontab進行設置,請參見這篇文章

crontab的兩種配置方式  
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如何讓一個表的時間欄位,隨著用戶對該行操作修改時自動更新 顯示表的所有欄位 數值列類型取值範圍及占用位元組 字元串列類型最大尺寸及占用位元組 時間列類型取值範圍及占用位元組 ...
  • Cygwin Unable to get setup from * 錯誤 解決方案 是因為用自定義鏡像站點,比如 http://mirrors.xdlinux.info/cygwin/x86_64/ 安裝x86_64位Cygwin時,因為多加了/導致Cygwin安裝程式找不到steup 換成如下即可 ...
  • shell的性質 Linux系統的shell相當於操作系統的“一層外殼”,它是命令語言解釋器,它為用戶提供了使用操作系統的介面。它不屬於內核,而是在內核之外以用戶態方式運行。它的基本功能是解釋並執行用戶打入的各種命令,實現用戶與Linux內核的介面。 個人理解:shell就是普通的用戶態程式,能夠理 ...
  • 前言:學習通配符有點為正則表達式打基礎的感覺……之前學python有學過正則表達式,所以這篇博客學起來還是挺快的。 特殊符號 通配符 他是shell的內置功能通配符,用過DOS的應該很瞭解,也很常用。通配符,指包含這些字元的字元串“?”,“*”,“[]”,{} 通配符含義 >匹配文件名 通配符詳解 ...
  • 不同的軟體的安裝方法是並不相同的。有的軟體只能通過特定的方法來安裝。 在不同的Linux發行版本上安裝同一個軟體的方法也未必相同, 因此有的時候,你在網上找到的在Ubuntu上安裝某個軟體的方法,也許在CentOS上並不能成功。 RPM、YUM、dpkg、apt-get、aptitude ...
  • Linux GSO邏輯分析 ——lvyilong316 (註:kernel版本linux 2.6.32) GSO用來擴展之前的TSO,目前已經併入upstream內核。TSO只能支持tcp協議,而GSO可以支持tcpv4, tcpv6, udp等協議。在GSO之前,skb_shinfo(skb)有兩 ...
  • 文件屬性概述(ls -lhi) linux里一切皆文件Linux系統中的文件或目錄的屬性主要包括:索引節點(inode),文件類型,許可權屬性,鏈接數,所歸屬的用戶和用戶組,最近修改時間等內容: 解釋: 第一列:inode索引節點編號(相當於人的身份證,全國唯一)第二列:文件類型及許可權第二列共11個字 ...
  • Download opencv https://github.com/opencv/opencv/tree/2.4 安裝必要的依賴 Enter opencv dirctory and install cmake 出錯,報錯如下 根據報錯信息,應該是qt沒裝 安裝qt cmake成功會生成如下文件 t ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...