1. 程式人生 > >Linux效能監控分析命令—vmstat命令詳解

Linux效能監控分析命令—vmstat命令詳解

一、vmstat介紹

語法格式: vmstat [-V] [-n] [-S unit] [delay [count]]

              -V prints version.

              -n causes the headers not to be reprinted regularly.

              -a print inactive/active page stats.

              -d prints disk statistics

              -D prints disk table

              -p prints disk partition statistics

              -s prints vm table

              -m prints slabinfo

              -t add timestamp to output

              -S unit size

              delay is the delay between updates in seconds.

              unit size k:1000 K:1024 m:1000000 M:1048576 (default is K)

              count is the number of updates.

引數解釋:

-V:顯示vmstat版本資訊

-n:只在開始時顯示一次各欄位名稱

-a:顯示活躍和非活躍記憶體

-d:顯示各個磁碟相關統計資訊

-D:顯示磁碟總體資訊

-p:顯示指定磁碟分割槽統計資訊

-s:顯示記憶體相關統計資訊及多種系統活動數量

-m:顯示slabinfo

-t:在輸出資訊的時候也將時間一併輸出出來

-S:使用指定單位顯示。引數有k、K、m、M,分別代表1000、1024、1000000、1048576位元組(byte)。預設單位為K(1024bytes)

delay:重新整理時間間隔。如果不指定,只顯示一條結果

count:重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,這時重新整理次數為無窮

二、vmstat各欄位說明

1、procs

r:表示執行和等待CPU時間片的程序數(就是說多少個程序真的分配到CPU),這個值如果長期大於系統CPU個數,說明CPU不足,需要增加CPU

b:表示在等待資源的程序數,比如正在等待I/O或者記憶體交換等。

2、memory

swpd:表示切換到記憶體交換區的記憶體大小,即虛擬記憶體已使用的大小(單位KB),如果大於0,表示你的機器實體記憶體不足了,如果不是程式記憶體洩露的原因,那麼你該升級記憶體了或者把耗記憶體的任務遷移到其他機器。

free:表示當前空閒的實體記憶體

buff:表示baffers cached記憶體大小,也就是緩衝大小,一般對塊裝置的讀寫才需要緩衝

Cache:表示page cached的記憶體大小,也就是快取大小,一般作為檔案系統進行緩衝,頻繁訪問的檔案都會被快取,如果cache值非常大說明快取檔案比較多,如果此時io中的bi比較小,說明檔案系統效率比較好

3、swap

si:表示有磁碟調入記憶體,也就是記憶體進入記憶體交換區的記憶體大小;通俗的講就是 每秒從磁碟讀入虛擬記憶體的大小,如果這個值大於0,表示實體記憶體不夠用或者記憶體洩露了,要查詢耗記憶體程序解決掉。

so:表示由記憶體進入磁碟,也就是由記憶體交換區進入記憶體的記憶體大小。

注意:一般情況下si、so的值都為0,如果si、so的值長期不為0,則說明系統記憶體不足,需要增加系統記憶體

4、io

bi:表示由塊裝置讀入資料的總量,即讀磁碟,單位kb/s

bo:表示寫到塊裝置資料的總量,即寫磁碟,單位kb/s

注意:如果bi+bo的值過大,且wa值較大,則表示系統磁碟IO瓶頸

5、system

in:表示某一時間間隔內觀測到的每秒裝置終端數

cs:表示每秒產生的 上下文切換次數,例如我們呼叫系統函式,就要進行上下文切換,執行緒的切換,也要程序上下文切換,這個值要越小越好,太大了,要考慮調低執行緒或者程序的數目,例如在apache和nginx這種web伺服器中,我們一般做效能測試時會進行幾千併發甚至幾萬併發的測試,選擇web伺服器的程序可以由程序或者執行緒的峰值一直下調,壓測,直到cs到一個比較小的值,這個程序和執行緒數就是比較合適的值了。系統呼叫也是,每次呼叫系統函式,我們的程式碼就會進入核心空間,導致上下文切換,這個是很耗資源,也要儘量避免頻繁呼叫系統函式。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導致CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。

注意:

這兩個值越大,則由核心消耗的CPU就越多

6、CPU

us:表示使用者程序消耗的CPU時間百分比,us值越高,說明使用者程序消耗CPU時間越多,如果長期大於50%,則需要考慮優化程式或者演算法

sy:表示系統核心程序消耗的CPU時間百分比,一般來說us+sy應該小於80%,如果大於80%,說明可能存在CPU瓶頸

id:表示CPU處在空間狀態的時間百分比

wa:表示IP等待所佔用的CPU時間百分比,wa值越高,說明I/O等待越嚴重,根據經驗wa的參考值為20%,如果超過20%,說明I/O等待嚴重,引起I/O等待的原因可能是磁碟大量隨機讀寫造成的,也可能是磁碟或者監控器的貸款瓶頸(主要是塊操作)造成的

綜上所述,如果評估CPU,需要重點關注procs項的r列值和CPU想的us、sy、wa列的值

三、使用實踐

一般vmstat工具的使用是通過兩個數字引數來完成的,第一個引數是取樣的時間間隔數,單位是秒,第二個引數是取樣的次數,如:

2表示每個兩秒採集一次伺服器狀態,1表示只採集一次。 實際上,在應用過程中,我們會在一段時間內一直監控,不想監控直接結束vmstat就行了,例如:

這表示vmstat每2秒採集資料,一直採集,直到我結束程式,這裡採集了7次資料我就結束了程式。

========================================