歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

服務器監控(包括性能指標與web應用程序)

服務器監控

?? 在搭建服務器時,除了部署webapp之外,還需要服務的異常信息與服務器性能指標進行監控,一旦有異常則通知管理員。
?? 服務器使用Linux+Nginx-1.9.15+Tomcat7+Java搭建的。
?? 編寫腳本檢測錯誤日志和服務器性能指標,一旦新生錯誤日志或者性能降低到設定的阈值時,則使用雲監控將報警上傳到雲賬號。

服務運行監控

?? 錯誤日志包含以下三個方面:

nginx 錯誤信息監控(nginx.conf配置)
${NGINX_HOME}/logs/error.log tomcat 錯誤信息監控(server.xml配置)
${TOMCAT_HOME}/logs/catalina.out webapp錯誤信息監控(log4j)
${WEBAPP_HOME}/log/error

機器性能指標

?? 一般都會使用linux系統的機器作為服務器,那麼當在上面搭建服務時,需要對一些常用的性能指標進行監控,那麼一般包含哪些指標呢?下面對其進行一些總結,歡迎補充…

指標

CPU(Load) CPU使用率/負載 Memory 內存 Disk 磁盤空間 Disk I/O 磁盤I/O Network I/O 網絡I/O Connect Num 連接數 File Handle Num 文件句柄數

CPU

說明
?? 機器的CPU占有率越高,說明機器處理越忙,運算型任務越多。一個任務可能不僅會有運算部分,還會有I/O(磁盤I/O與網絡I/O)部分,當在處理I/O時,時間片未完其CPU也會釋放,因此某個時間點的CPU占有率沒有太大的意義,因此需要計算一段時間內的平均值,那麼平均負載(Load Average)這個指標便能很好得對其進行表征。平均負載:它是根據一段時間內占有CPU的進程數目和等待CPU的進程數目計算出來的,其中等待CPU的進程不包括處於wait狀態的進程,比如在等待I/O的進程,即指那些就緒狀態的進程,運行只缺CPU這個資源。具體如何計算可以參見Linux內核代碼,計算出一個數之後,然後除以CPU核數,結果:

<=3 則系統性能較好。 <=4 則系統性能可以,可以接收。 >5 則系統性能負載過重,可能會發生嚴重的問題,那麼就需要擴容了,要麼增加核,要麼分布式集群。

查看命令

vmstat
vmstat n m
n表示每隔n秒采集一次,m表示一共采集多少次,如果m沒有,那麼會一直采集下去. 在終端鍵入 vmstat 5
Alt textvc+436Oss6y5/cHLNb7NuN+jrLOsuf3ByzEwvs2yu9X9s6PBy6Ost/7O8cb3tcTXtMysutzOo8/VoaN0b3C1xLi61NjA4MvGw7/D67XE1MvQ0LbTwdCho8jnufvUy9DQttPB0Ln9tPOjrLHtyr7E47XEQ1BVuty3scOmo6zSu7Dju+HU7LPJQ1BVyrnTw8LKuty436GjPGJyIC8+DQpio7qx7cq+1+jI+7XEvfizzKOsyOfU2rXItP1JL0/H68fzoaM8YnIgLz4NCmluo7rDv8PrQ1BVtcTW0LbPtM7K/aOssPzAqMqxvOTW0LbPoaM8YnIgLz4NCmNzo7rDv8Pryc/Pws7Ex9C7u7TOyv2jrMD9yOfO0sPHtffTw8+1zbO6r8r9o6y+zdKqvfjQ0MnPz8LOxMfQu7ujrM/fs8y1xMfQu7ujrNKy0qq9+LPMyc/Pws7Ex9C7u6Os1eK49ta10qrUvdCh1L26w6OszKu088HLo6zSqr+8wse197XNz9+zzLvy1d+9+LPMtcTK/cS/o6zA/cjn1NphcGFjaGW6zW5naW541eLW1ndlYrf+zvHG99bQo6zO0sPH0ruw49f20NTE3LLiytTKsbvhvfjQ0Ly4x6eyoreiyfXWwby4zfKyoreitcSy4srUo6zRodTxd2Vit/7O8cb3tcS9+LPMv8nS1NPJvfizzLvy1d/P37PMtcS35da10rvWsc/CtfejrNG5suKjrNaxtb1jc7W90ru49rHIvc/QobXE1rWjrNXiuPa9+LPMus3P37PMyv2+zcrHsci9z7rPysq1xNa1wcuho8+1zbO199PD0rLKx6Osw7+0zrX308PPtc2zuq/K/aOsztLDx7XEtPrC677Nu+G9+MjrxNq6y7/VvOSjrLW81sLJz8/CzsTH0Lu7o6zV4rj2yse63LrE18rUtKOs0rLSqr6hwb+x3MPixrW3sbX308PPtc2zuq/K/aGjyc/Pws7Ex9C7u7TOyv25/bbgse3KvsTjtcRDUFW087K/t9bAy7fR1NrJz8/CzsTH0Lu7o6y1vNbCQ1BVuMnV/b6tysK1xMqxvOTJ2cHLo6xDUFXDu9PQs+S31sD708OjrMrHsru/ycihtcShozxiciAvPg0KdXOjutPDu6dDUFXKsbzk1byxyCglKaOswP3I59Ta1/a439TLy+O1xMjOzvHKsaOsyOe808PcveLD3KOsxMfDtLvhtbzWwnVzuty086Os1eLR+aOsctKyu+Gx5LTzo6zU7LPJz7XNs8a/vrGhozxiciAvPg0Kc3mjus+1zbNDUFXKsbzk1byxyCglKaOsyOe5+8yruN+jrLHtyr7Ptc2ztffTw8qxvOSzpKOsyOdJT8a1t7Gy2df3oaM8YnIgLz4NCmlkIKO6v9XP0CBDUFXKsbzk1byxyCglKaOs0ruw48C0y7WjrGlkICsgdXMgKyBzeSA9IDEwMCzSu7DjyM/Oqmlkyse/1c/QQ1BVyrnTw8LKo6x1c8rH08O7p0NQVcq508PCyqOsc3nKx8+1zbNDUFXKudPDwsqhozxiciAvPg0Kd3SjurXItP1JT7XEQ1BVyrG85KGjIHVwdGltZTxiciAvPg0KPGltZyBhbHQ9"Alt text" src="http://www.2cto.com/uploadfile/Collfiles/20160517/20160517090014338.png" title="\" />
17:53:46為當前時間
up 158 days, 6:23機器運行時間,時間越大說明你的機器越穩定
2 users用戶連接數,而不是總用戶數
oad average: 0.00, 0.00, 0.00 最近1分鐘,5分鐘,15分鐘的系統平均負載。
將平均負載值除以核數,如果結果不大於3,那麼系統性能較好,如果不大於4那麼系統性能可以接受,如果大於5,那麼系統性能較差。 top
這裡寫圖片描述
top命令用於顯示進程信息,top詳細見http://www.cnblogs.com/peida/archive/2012/12/24/2831353.html
這裡主要關注Cpu(s)統計那一行:
us:用戶空間占用CPU的百分比
sy:內核空間占用CPU的百分比
ni:改變過優先級的進程占用CPU的百分比
id: 空閒CPU百分比
wa: IO等待占用CPU的百分比
hi:硬中斷(Hardware IRQ)占用CPU的百分比
si:軟中斷(Software Interrupts)占用CPU的百分比
從top的結果看CPU負載情況,主要看us和sy,其中us<=70,sy<=35,us+sy<=70說明狀態良好,同時可以結合idle值來看,如果id<=70 則表示IO的壓力較大。也可以和uptime一樣,看第一行。引用[1] 分析
表示系統CPU正常,主要有以下規則:
CPU利用率:us <= 70,sy <= 35,us + sy <= 70。引用[1] 上下文切換:與CPU利用率相關聯,如果CPU利用率狀態良好,大量的上下文切換也是可以接受的。引用[1] 可運行隊列:每個處理器的可運行隊列<=3個線程。

Memory

說明
?? 內存也是系統運行性能的一個很重要的指標,如果一個機器內存不足,那麼將會導致進程運行異常而退出。如果進程發生內存洩漏,則會導致大量內存被浪費而無足夠可用內存。內存監控一般包括total(機器總內存)、free(機器可用內存)、swap(交換區大小)、cache(緩存大小)等。

查看命令

vmstat
Alt text
結果各字段解釋如下(這裡只解釋與Memory相關的):
swpd:虛擬內存已使用的大小,如果大於0,表示你的機器物理內存不足了,如果不是程序內存洩露的原因,那麼你該升級內存了或者把耗內存的任務遷移到其他機器,單位為KB。
free :空閒的物理內存的大小,我的機器內存總共8G,剩余4457612KB,單位為KB。
buff:Linux/Unix系統來存儲目錄裡面有什麼內容,權限等的緩存,這裡大概占用280M,單位為KB。
cache:cache直接用來記憶我們打開的文件,給文件做緩沖,這裡大概占用280M(這裡是Linux/Unix的聰明之處,把空閒的物理內存的一部分拿來做文件、目錄和進程地址空間的緩存,是為了提高程序執行的性能,當程序使用內存時,buffer/cached會很快地被使用),單位為KB。
si: 每秒從磁盤讀入虛擬內存的大小,如果這個值大於0,表示物理內存不夠用或者內存洩露了,要查找耗內存進程解決掉。本機內存充裕,一切正常,單位為KB。
so:每秒虛擬內存寫入磁盤的大小,如果這個值大於0,同上,單位為KB。 free
這裡寫圖片描述
第二行是內存信息,total為機器總內存,used為多少已經使用,free為多少空閒,shared為多個進程共享的內存總額,buffers與cache都是磁盤緩存的大小,分別同vmstat裡面的buff與cache. 單位都是M.
第三行是buffers與cache總額的used與free. 單位都是M.
第四行是交換區swap的總額、已用與free. 單位都是M.
區別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區別。 這兩個的區別在於使用的角度來看,第二行是從OS的角度來看,因為對於OS,buffers/cached 都是屬於被使用,所以他的可用內存是4353M, 已用內存是3519M, 其中包括,內核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是從應用程序角度來看,對於應用程序來說,buffers/cached 是等於可用的,因為buffer/cached是為了提高文件讀取的性能,當應用程序需在用到內存的時候,buffer/cached會很快地被回收。
所以從應用程序的角度來說,可用內存=系統free memory+buffers+cached。 top
這裡寫圖片描述
只關注與內存相關的統計信息,即Mem與Swap行。分別是Mem與Swap的總額、已用量、空閒量、buffers與cache. 這裡便驗證了buffers是緩存目錄裡面有什麼內容,權限等信息的,而cache是用來swap的緩存的. cat /proc/meminfo
這裡寫圖片描述
主要這幾個字段:
MemTotal:內存總額
MemFree:內存空閒量
Buffers:同top命令的buffers
Cached:同top命令的cache
SwapToatl:Swap區總大小
SwapFree:Swap區空閒大小

分析
表示系統Mem正常,主要有以下規則:

swap in (si) == 0,swap out (so) == 0 可用內存/物理內存 >= 30%

磁盤

說明
?? 機器的磁盤空間也是一個重要的指標,一旦使用率超過阈值而使得可用不足,那麼就需要進行擴容或者清除一些無用的文件。查看命令
df
這裡寫圖片描述
Filesystem:文件系統的名稱
1K-blocks:1K塊的文件系統
Used:已使用量,單位為KB
Available:空閒量,單位為KB
Use%:已使用占比
Mounted on:掛載的目錄分析
表示系統磁盤空間正常,主要有以下規則:
Use% <= 90%

磁盤I/O

說明
?? 機器的磁盤空間也是一個重要的指標,一旦磁盤I/O過重,那麼說明運行的進程在大量的文件讀寫並且cache命中率低。那麼一個簡單的方法便是增大文件緩存大小來提高命中率從而降低I/O。
?? 在Linux中,內核希望能盡可能產生次缺頁中斷(從文件緩存區讀),並且能盡可能避免主缺頁中斷(從硬盤讀),這樣隨著缺頁中斷的增多,文件緩存區也逐步增大,直到系統只有少量可用物理內存的時候 Linux 才開始釋放一些不用的頁。引用[1] 查看命令
vmstat
Alt text
bi :塊設備每秒接收的塊數量,這裡的塊設備是指系統上所有的磁盤和其他塊設備,默認塊大小1024byte。
bo:塊設備每秒發送的塊數量,例如我們讀取文件,bo就要大於0。bi和bo一般都要接近0,不然就是IO過於頻繁,需要調整。 iostat
這裡寫圖片描述
Linux段為機器系統信息: 系統名稱、hostname、當前時間、系統版本.
avg-cpu段為cpu的統計信息(平均值):
%user:用戶級別運行所使用的CPU的百分比.
%nice:nice操作所使用的CPU的百分比.
%sys:在系統級別(kernel)運行所使用CPU的百分比.
%iowait:CPU等待硬件I/O時,所占用CPU百分比.
%idle:CPU空閒時間的百分比.
Device段段為設備信息(上圖中有兩個盤vda與vdb):
tps: 每秒鐘發送到的I/O請求數.
Blk_read/s: 每秒讀取的block數.
Blk_wrtn/s: 每秒寫入的block數.
Blk_read: 讀入的block總數.
Blk_wrtn: 寫入的block總數. sar -d 1 1
Alt text
sar -d表示查看磁盤報告 1 1 表示間隔1s,運行1次
其實cpu、緩存區、文件讀寫、系統交換區等信息都可以通過該命令查看,只是選項不同,具體參見:http://blog.chinaunix.net/uid-23177306-id-2531032.html
第一個段為機器系統信息,同iostat
第二個段為每次運行的dev I/O信息,這裡因為只運行一次,並有兩個設備dev252-0與dev252-16:
tps:每秒從物理磁盤I/O的次數.多個邏輯請求會被合並為一個I/O磁盤請求,一次傳輸的大小是不確定的.
rd_sec/s:每秒讀扇區數
wr_sec/s:每秒寫扇區數
avgrq-sz:平均每次設備I/O操作的數據大小 (扇區)
avgqu-sz:平均I/O隊列長度
await:為平均每次設備I/O操作的等待時間(單位ms),包括請求在隊列中的等待時間和服務時間
svctm:為平均每次設備I/O操作的服務時間(單位ms)
%util:表示一秒中有百分之幾的時間用於I/O操作
如果svctm的值與await很接近,表示幾乎沒有I/O等待,磁盤性能很好,如果await的值遠高於svctm的值,則表示I/O隊列等待太長,系統上運行的應用程序將變慢。
如果%util接近100%,表示磁盤產生的I/O請求太多,I/O系統已經滿負荷的在工作,該磁盤請求飽和,可能存在瓶頸。idle小於70% I/O壓力就較大了,也就是有較多的I/O。引用[1]
同時可以結合vmstat 查看b參數(等待資源的進程數)和wa參數(IO等待所占用的CPU時間的百分比,高過30%時IO壓力高)。引用[1] 分析
表示系統磁盤空間正常,主要有以下規則:
I/O等待的請求比例 <= 20% 提高命中率的一個簡單方式就是增大文件緩存區面積,緩存區越大預存的頁面就越多,命中率也越高。 Linux 內核希望能盡可能產生次缺頁中斷(從文件緩存區讀),並且能盡可能避免主缺頁中斷(從硬盤讀),這樣隨著次缺頁中斷的增多,文件緩存區也逐步增大,直到系統只有少量可用物理內存的時候 Linux 才開始釋放一些不用的頁。引用[1]

網絡I/O

說明
?? 如果服務器網絡連接過多,那麼會造成大量的數據包在緩沖區長時間得不到處理,一旦緩沖區不足,便會造成數據包丟失問題,對於TCP,數據包丟失便會進行重傳,這有會導致大量的重傳;對於UDP,數據包丟失不會進行重傳,那麼數據便會丟失。因此,服務器的網絡連接不宜過多,需要進行監控。
??服務器一般接收UDP與TCP請求,都是無狀態連接,TCP(傳輸控制協議)是一種提供可靠的數據傳輸協議,UDP(用戶數據報協議)是一種面向無連接的協議,即其傳輸簡單但不可靠。關於它們二者之間的區別,可以查閱相關資料。

查看命令

netstat
UDP
(1) netstat -ludp | grep udp
這裡寫圖片描述
Proto:協議名
Recv-Q:收到的請求個數
Send-Q:發送的請求個數
Local Address:本地地址與端口
Foreign Address:遠程地址與端口
State:狀態
PID/Program name:進程ID與進程名
(2) 進一步查看UDP接收的數據包情況 netstat -su
這裡寫圖片描述
畫圈的便是UDP數據包丟失統計,該項值增加了,說明存在udp數據包丟失,即網卡收到了,但是應用層沒有來得及處理而造成的丟包。 TCP
(1) netstat
這裡寫圖片描述
各字段含義同UDP
(2) 查看重傳率
因為TCP是可靠傳輸協議,如果數據包丟失會進行重傳,因此TCP需要查看其重傳率.
cat /proc/net/snmp " grep Tcp
這裡寫圖片描述
那麼重傳率為RetransSegs/OutSegs 分析
UDP丟包率或者TCP重傳率不能高於多少,這兩個值由系統開發定義,此處,拍腦袋決定UDP包丟包率與TCP包重傳率不能超過1%/s。

連接數

說明
?? 對於每一台服務器,都應該限制同時連接數,但是這個阈值又不好確定,因此當監測到系統負載過重時,然後取其連接數,這個值便可作為參考值。命令
netstat
netstat -na | sed -n '3,$p' |awk '{print $5}' | grep -v 127\.0\.0\.1 | grep -v 0\.0\.0\.0 | wc -l
這裡寫圖片描述 分析
系統負載過重時,該值作為服務器的峰值參考值。如果超過1024報警

文件句柄數

說明
?? 文件句柄數即當前打開的文件數,對於linux,系統默認支持的最大句柄數是1024,當然每個系統可以不一樣,也可以修改,最大不能超過無符號整型最大值(65535),可以使用ulimit -n命令進行查看,即因此如果同時打開的文件數超過這個數便會發生異常。因此這個指標也需要進行監控。查看命令
lsof
lsof -n | awk '{print $1,$2}' | sort | uniq -c | sort -nr
這裡寫圖片描述
三列分別是打開的文件句柄數, 進程名,進程號分析
將所有的行的第一列相加便是系統目前打開的文件句柄數num,如果num<=max_num*85%則報警。

性能指標總結

CPU
CPU利用率:us <= 70,sy <= 35,us + sy <= 70。上下文切換:與CPU利用率相關聯,如果CPU利用率狀態良好,大量的上下文切換也是可以接受的。可運行隊列:每個處理器的可運行隊列<=3個線程。 Memory
swap in (si) == 0,swap out (so) == 0 可用內存/物理內存 >= 30% Disk
Use% <= 90% Disk I/O
I/O等待的請求比例 <= 20% Network I/O
UDP包丟包率與TCP包重傳率不能超過1%/s。 Connect Num
<= 1024 File Handle Num
num/max_num <= 90%

總結

? ? 腳本檢測nginx、tomcat與webapp運行異常日志(包括nginx與tomcat是否正在運行)與服務器性能七個指標,一旦發現異常信息和性能超標,那麼馬上發送郵件給管理員,也可以使用雲監控push給管理員的雲賬號。

 

Copyright © Linux教程網 All Rights Reserved