一、監控概述
參看點擊開啟連結
監控基本上分為機器監控和服務監控,本文主要談的是機器監控,服務監控線上部署的服務有關,對外沒法談···
二、記憶體監控
linux就是個作業系統,他就是一組程式的集合,一組管理電腦軟硬體資源、合理組織工作流程,以方便使用者使用電腦的程式的集合,作業系統離不開硬體資源,伺服器就是他的“宿主”。伺服器硬體出問題,那作業系統也好不了。所以機器監控玩什麼。一方面玩的是“作業系統做什麼”,一方面玩的是“伺服器有哪些硬體資源”,也就是監控硬體資源,以確保作業系統正常工作。 1. 作業系統做什麼
前面說了,作業系統是一組程式的集合,是一組管理就算計軟硬體資源、合理組織工作流程,以方便使用者使用電腦的程式的集合(《作業系統理論》),一個作業系統至少應該具備五項功能:記憶體管理、進程管理、檔案系統管理、使用者介面管理、硬體裝置管理。這就引出了本文要談的內容,記憶體。 2. 伺服器有哪些資源
什麼是伺服器資源。其實主要是硬體資源,主要是我們關注的硬體資源。之所要關注,是因為我們線上部署的服務安全無時無刻都與這些資源息息相關。一台伺服器有哪些資源呢。磁碟容量、磁碟IO、記憶體、網卡和CPU。所以,要瞭解linux作業系統,就要從“作業系統做什麼”的五部分出發,但是要把理論付諸於實踐,就需要把“作業系統做什麼”映射到“伺服器有哪些資源”上。 3. 記憶體監控
迴歸正題。有了上面的引入,那就直接談記憶體監控。監控記憶體狀態,當作業系統異常時,作為判斷系統異常的線索之一(基本上都需要綜合硬體資源監控來進行判定);確認作為異常源時,監控資料作為找出元兇的“證據”。
三、linux記憶體機制
“追查有道”,首先你要知道linux的記憶體機制。你不能看到系統空下記憶體只剩下一點點就言之鑿鑿的認定記憶體是異常源。
linux記憶體機制:點擊開啟連結
linux swap:點擊開啟連結
請認真看完上面兩個連結,因為linux記憶體機制一方面是實體記憶體,一方面是交換分區,交換分區作為實體記憶體的擴充;而實體記憶體,以方面是緩衝機制,一方面是非緩衝機制。對他們清晰的認識,是你追查思路的主要來源。簡單萃取一下:
1. swap分區不夠,那麼系統會假死,基本上你只能重啟機器了,所以swap分區的合理分配很重要;
2. 你看到的記憶體只剩下一點點,也不並不是真的,因為linux緩衝機制的存在;
請認真閱讀上面兩個連結,下面作為linux緩衝機制的一點補充(資料截圖:個人PC安裝的虛擬機器,因為安裝了七八個虛擬機器,所以單個虛擬機器分配的資源很少,系統CentOS release 6.4,核心版本Linux localhost 2.6.32-358.el6.i686)。
看紅色框資料,對linux實體記憶體而言,總共498M,已經使用154M,空閑343M,498M=154M+343M,資料吻合;
看黃色框資料,對linux記憶體機制而言,總共499M,已經使用65M,空閑433M,498M=65M+433M,資料吻合;
這個資料,單看都是正確的,但是合起來看,看哪兒都覺得彆扭。但如果你真的瞭解linux記憶體緩衝機制,那麼這一切都是合理的。再看下一個圖。
看紅色框資料:對linux實體記憶體而言,使用154M,其中buffers和cached使用23M+65M=88M,還有154M-88M=66M(實際上因該是65M,因為用M作為單位,如果以byte作為單位,則不存在誤差)不見蹤影,但是巧合的是,在linux記憶體機制中,使用的記憶體剛好是65M。
154M=23M+65M+65M(為了方便觀看,用的單位是M,因此存在誤差,如果用byte,則不會存在誤差)。
如果你認真看了第一個連結的文章,你會知道buffers的23M和cached的65M是linux緩衝,而buffers/cache的used 65M則是真實的記憶體使用量(進程、核心等使用的記憶體,而不是linux緩衝機制佔用的記憶體)。
看黃色框資料:對linux實體記憶體而言,空閑343M記憶體,但是對於linux記憶體機制而言,空閑433M記憶體,還有433M-343M=90M空閑記憶體(實際上是88M左右),但是你看實體記憶體一欄,buffers和cached的資料加起來正好是88M。
所以,如果不瞭解linux記憶體機制,就會錯誤的判定當前記憶體使用量情況,造成誤判定,導致元兇逍遙法外。
補充:
為了證明是M單位造成誤差,補上byte單位元據截圖,可自行加減驗證
四、free、vmstat、top“三賤合璧”追查真相
為什麼不採用其他更強大的程式來監控。首先考慮的是安全。這三個指令基本上系統都會內建,如果自己安裝,你是否能保證安裝的程式是安全的呢。你要知道,這台機器上面可是存放商務服務和資料,輕易不容閃失。其次,效能也是要考慮的。叢集變大之後,如果每台伺服器的資源消耗都很低,那浪費就太大了,因此公司總會想方設法的提高資源使用率,你不可能用搞自己PC機的姿勢來搞線上的伺服器。所以額外安裝程式來進行監控,額外的程式會消耗多少伺服器多少效能,以及這個額外程式的穩定性保證等等···要想拒絕你安裝,理由太多了。
所以,用原裝的吧。 1. free
當系統出問題,追查至記憶體的時候,要判定記憶體是否是異常源,先看free指令資料。
先看交換區swap的使用方式,因為linux的記憶體機制,當swap不夠用的時候,系統會出現假死,當然真的假死的時候,你就看不到了;但是在假死前期,你還是能看到資料,做一些補救工作。如果交換區不正常,則進入vmstat指令(下節);如果正常,則看記憶體空閑情況,主要關注linux記憶體機制的free和實體記憶體的buffers和cached,正常則不用追查,否則進入vmstat做進一步的判斷。
當然這裡只是列舉一般情況的追查,更多的還是要依靠線上經驗。 2. vmstat
當交換區不夠用的時候,實體記憶體基本上也到瓶頸了。如果記憶體基本耗光了,而系統因此被拖的很慢,你就可以看vmstat中swap是否存在大量的讀寫,假死前期還是能看到大量讀寫的。如果出現大量交換區讀寫,說明當前記憶體瓶頸了,存在大量的換入換出,導致CPU空耗在IO上面。這時候需要恢複系統,則進入top指令。 3. top
top能看到當前進程的即時資料,其實主要就是看誰消耗太多記憶體資源,判斷是否能手動kill然後釋放資源的問題。
附註:
寫的粗糙,sorry,湊合看吧,其實更多的還是依靠線上經驗,但是都離不開知識的積累。