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
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...