大型分布式網站架構設計與實踐——集群監控


一、監控指標

成熟穩健的系統往往需要對集群運行時的各個指標進行收集,如系統的load、CPU的利用率、I/O繁忙程度、網絡traffic、內存利用率、應用心跳等。

1、load
系統的load被定義為特定時間間隔內運行隊列中的平均線程數,每一個CPU的核都維護了一個運行隊列。
一般每個CPU當前的活動線程數不大於3,視為正常;大於5表示系統負載非常高了。
命令:top、uptime

 

2、CPU利用率
在linux系統下,CPU的時間消耗主要在這幾個方面,即用戶進程、內核進程、中斷處理、I/O等待、Nice時間、丟失時間、空閑等幾個部分,而CPU的利用率則為這些時間所占總時間的百分比。

us(User Time)用戶時間,表示CPU執行用戶進程所占用的時間;
sy(System Time)系統時間,表示CPU在內核態所花費的時間;
ni(Nice Time)調整優先級時間,表示CPU在調整進程優先級的時候花費的時間;
id(Idle Time)空閑時間,表示系統處於空閑期,等待進程運行,這個過程所占用的時間;
wa(Waiting Time)等待時間,表示CPU在等待I/O操作所花費的時間;
hi(Hard Irq Time)硬件中斷時間,表示系統處理硬件中斷所占用的時間;
si(Soft Irq Time)軟件中斷時間,表示系統處理軟件中斷所占用的時間;
st(Steal Time)丟失時間,表示當前虛擬機與該宿主上的其他虛擬機間的CPU爭用時間;

命令: top + 1、 jps + top -p x

 

3、磁盤剩余空間
du -d1 -h /home
-d 指定遞歸深度,-h按照文件大小單位的格式化輸出

 

4、網絡traffic
sar -n DEV 1 1
-n 表示匯報網絡狀況,DEV查看各個網卡的網絡流量,第一個1表示每秒抽樣一次,第二個1表示總共取一次,
Average表示平均值。

 

5、磁盤I/O
iostat -d -k
-d 表示查看磁盤的使用情況, -k表示以KB為單位顯示;

 

6、內存的使用
free -m

linux的內核會將剩余的內存申請為cached,而cached不屬於free范疇,用於分配給程序的內存不僅僅只有free,還包括buffers和cached占用的內存;
對於應用來說,更值得關注的應該是虛擬內存swap的消耗,swap內存使用過多,表示物理內存不夠用,操作系統將
本應該是物理內存的一部分內存頁調度到磁盤上。swap I/O較為頻繁,會嚴重影響系統的性能。
vmstat 可以查看到swap I/O情況

7、qps
query per second,即每秒查詢數。qps在很大程度上代表了系統在業務上的繁忙程度,而每次請求的背后,可能對應着多次磁盤I/O、所賜網絡請求,以及多個CPU時間片。

 

8、rt
response time 直接關系前端的用戶體驗。降低rt時間需要從各個方面入手,例如:部署CDN邊緣節點來縮短用戶請求的物理路徑;通過內容壓縮來減少傳輸的字節數;使用緩存來減少磁盤I/O和網絡請求等。

 

CPU、內存、網絡、磁盤、qps和rt,是所有類型的應用都需要關注;如select/ps、update/ps只針對數據庫應用,thread running值針對MySql數據庫應用,FullGC只針對Java應用。

 

9、select/ps
請求數量過多,則可以適當的增加讀庫,以降低系統讀的壓力;

 

10、update/ps、delete/ps
請求數量過多,則可以對相應的庫進行拆分,將請求分散到其他集群;

 

11、GC
當GC發生時,JVM上的應用程序的工作線程會暫時停止運行,從外部來看便是程序暫時停止響應。可應對JVm的一些內存參數進行調整和優化,以降低GC時應用停止響應的時間。

 

二、心跳檢測
對於自治的分布式系統而言,一般都會有一整套的集群心跳監測機制,能夠實時地移除掉宕機的Slave,避免路由規則將任務分配給已宕機的機器來處理;

1、ping
ping指令能夠檢測網絡鏈路是否暢通,遠端主機是否能夠到達;

2、應用層檢測
使用應用層的心跳檢測來對應用的健康狀態進行監控,通過curl指令定時訪問應用中的自檢url,課實時地感知到應用的健康狀態,一旦系統無響應或者響應超時,即可輸出報警信息,以被相應的監控調度系統捕捉到,第一時間通知開發和運維人員進行處理;

3、業務檢測
對於web程序,自動檢測頁面的異常情況;
3.1 通過頁面大小的變動范圍來判斷頁面是否出現異常,但是受大的改版影響比較大;
3.2 檢測頁面的返回值,但是這樣檢測跟具體的業務掛鈎,或者對業務的代碼具有一定的侵入性;

 

三、容量評估及應用水位
在新系統上線之前,或者需要在已在線的系統上做一些推廣活動時,相關的業務方需要對系統的訪問量進行評估;
1、業務方需要給出總的訪問量(PV、UV)以后,推導到每個獨立的子系統;

 

 

2、取其中的一個最小子集來進行壓力測試,以便得出每個單元所能承載的訪問量;
測試機器的配置需要與線上的機器保持一致,主要關心兩個值qps、rt,當rt達到無法忍受的上限時,或者系統某些地方開始出現瓶頸,如內存不足,系統頻繁Full GC,I/O等待時間過長,CPU load超高,這個時候的qps便是一個單元能夠承受的極限值;

3、對系統進行評估出需要的機器數;
使用80/20原則,80%的訪問請求將在20%的時間內到達,這樣便可以根據系統對應的PV計算出系統的峰值qps
峰值qps=(總的PV*80%)/(60*60*24*20%)
機器數 = 總的峰值qps / 壓測得出的單台機器極限qps


4、系統上線或者正在承受比較大壓力時,通過當前的運行水位圖來了解當前系統的壓力;
通過訪問日志分析,或者其他的統計手段,實時計算出當前系統的qps值(前1~2分鍾的平均值),然后結合系統上線之前壓測得到的單台機器的極限qps,乘以當前部署的機器總數,便能得到當前的水位:
當前水位 = 當前總qps / (單台機器極限qps*機器數) * 100%


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM