集羣監控

集羣監控ios

大型互聯網企業的背後,依靠的是成千上萬臺服務器日夜不停的運轉,以支撐其業務的運轉。宕機對於互聯網企業來講,代價是沉重的,輕則影響用戶體驗,重則直接影響交易,致使交易下跌,而且給企業聲譽形成不可挽回的損失。對於這些機器對應的開發和運維人員來講,即使是每臺機器登錄一次,登錄那麼多臺機器也夠嗆,況且還須要進行系統指標的檢查。所以,依靠人力是不可能完成24小時不間斷監控服務器的任務的。算法

現在,互聯網已經深刻到人們生活的每一個角落,能夠想象一下,假如哪一天Google或者Baidu不能搜索,抑或是amazon或者taobao不能進行購物,這個世界將會如何?所以,成熟穩健的系統每每須要對集羣運行時的各個指標進行收集,如系統的load、CPU利用率、I/O繁忙程度、網絡traffic、內存利用率、應用心跳等,對這些信息進行實時監控,如發現異常狀況,可以第一時間通知到相應的開發和運維人員進行處理,在用戶尚未察覺以前處理完故障和異常,將損失下降到最低。數據庫

下面來看一下,常見的集羣監控指標。緩存

 

load:反映系統忙閒程度服務器

在Linux系統中,能夠經過top和uptime命令來查看系統的load值,那麼什麼是load呢?系統的load被定義爲特定時間間隔內運行隊列中的平均線程數,若是一個線程知足如下條件,該線程就會處於運行隊列中:網絡

  • 沒有處於I/O等待狀態
  • 沒有主動進入等待狀態,也就是沒有調用wait操做
  • 沒有被終止固然load計算的算法較爲複雜,所以,這種狀況也不是絕對的。

load值越大,也就意味着系統的CPU越繁忙,這樣線程運行完之後等待操做系統分配下一個時間片斷的時間也就越長。假設:併發

  • CPU1分鐘內最多處理100個線程任務,load值爲0.2,意味着這1分鐘內CPU處理了20個任務
  • CPU1分鐘內最多處理100個線程任務,load值爲1,意味着這1分鐘內CPU恰好將這100個任務處理完
  • CPU1分鐘內最多處理100個線程任務,load值爲1.7,意味着這1分鐘內CPU除了處理了這100個任務外,還有70個任務等待處理

固然,load的計算算法較爲複雜,並不像上面說的這麼簡單,這麼打比方只是爲了簡單說明問題。假設通常來講,只要load值不大於3,咱們認爲它的負載是正常的(考慮到多核CPU的系統),若是load值大於5,則表示當前系統的負載已經很是高了,須要採起相應的措施來下降系統的負載。運維

w、top、uptime這三個命令均可以用來查看系統的load值,下面演示一下使用uptime命令查看系統的load:分佈式

load average後面跟的三個值分別表示在過去1分鐘、5分鐘、15分鐘內系統的load值。性能

 

CPU利用率:反映CPU的使用和消耗狀況

在Linux系統中,CPU的時間消耗主要在這幾個方面:用戶進程、內核進程、中斷處理、I/O等待、Nice時間、丟失時間、空閒等幾個部分,而CPU的利用率則爲這些時間所佔用的總時間的百分比。經過CPU的利用率,可以反映出CPU的使用和消耗狀況。

能夠經過top命令來查看Linux系統的CPU消耗狀況:

上面一部分,也就是"%Cpu(s)"開頭的內容是咱們須要關注的,後面跟的列即是各類狀態下CPU所消耗的時間比,看下每一列的意思:

  • 用戶時間(User  Time)即us所對應的列,表示CPU執行用戶進程所佔用的時間,一般狀況下但願us的佔比越高越好 
  • 系統時間(System Time)即sy所對應該的列,表示CPU自內核態所花費的時間,sy佔比比較高一般意味着系統在某些方面設計得不合理,好比頻繁的系統調用致使的用戶態和內核態的頻繁切換
  • Nice時間(Nice Time)即ni所對應的列,表示系統在調整進程優先級的時候所花費的時間
  • 空閒時間(Idle Time)即id所對應的列,表示系統處於空閒期,等待進程運行,這個過程所佔用的時間。固然,咱們但願id的佔比越低越好
  • 等待時間(Waiting Time)即wa所對應的列,表示CPU在等待I/O操做所花費的時間,系統不該該花費大量的時間來進行等待,不然便表示可能有某個地方設計不合理
  • 硬件中斷處理時間(Hard Irq Time)即hi對應的列,表示系統處理硬件中斷所佔用的時間
  • 軟件中斷處理時間(Soft Irq Time)即si對應的列,表示系統處理軟件中斷所佔用的時間
  • 丟失時間(Steal Time)即st對應的列,實在硬件虛擬化開始流行後操做系統新增的一列,表示被強制等待虛擬CPU的時間

對於多個或多核CPU的狀況,經常須要查看每一個CPU的利用狀況,此時能夠按1,即可以查看到每一個核的CPU利用率:

看到上面出現了"%Cpu0"而不是"%Cpu(s)",由於只有一個CPU,因此只展現Cpu0的CPU利用率

 

磁盤剩餘空間

磁盤剩餘空間也是一個很是關鍵的指標,若是磁盤沒有足夠的剩餘空間,正常的日誌寫入以及系統I/O都將沒法進行。

經過df命令能夠查看磁盤的剩餘空間:

-h表示按單位格式化輸出。該命令顯示sda1一共有19GB的空間,使用了4.3GB,剩餘14GB可用。

若是要查看具體目錄所佔用的內存空間,分析大文件所處位置,可使用du命令來進行查看:

-d指定了遞歸深度爲1層,表示只列出指定目錄的下一級目錄文件大小,-h用來表示格式化輸出。

 

磁盤I/O

磁盤I/O的繁忙程度也是一個重要的系統指標,對於I/O密集型的應用來講,好比數據庫應用和分佈式文件系統,I/O的繁忙程度也必定程度上反映了系統的負載狀況,容易成爲應用程序性能的瓶頸。可使用iostat來查看系統的I/O情況:

看到報錯,這也很正常。Linux環境下每一個命令就和Windows環境下的軟件同樣,必須先安裝再使用,按照報錯的提示來看,iostat當前並無安裝。因此咱們按照提示的來安裝一下sysstat就能夠了:

安裝完畢後,再使用iostat:

-d表示查看磁盤使用情況,-k表示以KB爲單位顯示。各個列中,Device表示設備名稱、tps表示每秒處理的I/O請求數、kB_read/s表示每秒從設備讀取的數據量、kB_wrtn/s表示美標向設備寫入的數據量、kB_read表示讀取的數據總量、kB_wrtn表示寫入的數據總量。

 

內存使用

程序運行時的數據加載、線程併發、I/O緩衝等,都依賴於內存,可用內存的大小決定了程序是否能正常運行以及運行的性能。

經過free命令可以查看到系統的內存使用狀況,加上-m參數表示以MB爲單位:

Linux的內存包括物理內存Mem和虛擬內存Swap,下面介紹每一列的含義:

  • total----內存總共的大小
  • used----已使用的內存大小
  • free----可以使用的內存大小
  • shared----多個進程共享的內存大小
  • buffers----緩衝區的大小
  • cached----緩存的大小

Linux系統的內存管理機制與Windows系統有所不一樣,其中有一個思想即是內存利用率最大化,內核會將剩餘的內存申請爲cached,而cached不屬於free範疇。所以,當系統運行時間較長時,會發現cached這塊區域比較大,對於有頻繁文件讀/寫操做的系統,這種現象更爲明顯。

可是,free的內存小,並不表明可用小,當程序須要申請更大的內存時,若是free內存不夠,系統會將剩餘部分cached會buffers內存回收,回收的內存再分配給應用程序。所以,Linux可用於分配的內存不只僅只有free的內存。可看free命令顯示的第三行,也就是"-/+ buffers/cache"對應的行,這一行將內存進行了從新計算,used減去buffers和cached佔用的內存,而free則加上了buffers和cached對應的內存。

對於應用來講,更值得關注的應該是虛擬內存Swap的消耗,Swap內存使用過多,表示物理內存已經不夠用了,操做系統將本應該物理內存存儲的一部份內存頁調度到磁盤上,以騰出足夠的空間給當前的進程使用。當其餘進程須要運行時,再從磁盤將內存的頁調度到物理內存當中,以恢復進程的運行。而這個調度的過程當中,會產生Swap I/O,若是Swap I/O較爲頻繁,將嚴重地影響系統的性能。

經過vmstat命令,能夠查看到Swap I/O的狀況:

其中,swap列的si表示每秒從磁盤交換到內存的數據量,單位是KB/s,so表示每秒從內存交換到磁盤的數據量,單位也是KB/s。

相關文章
相關標籤/搜索