1、做用及語法:
命令用來顯示Linux系統虛擬內存狀態,也能夠報告關於進程、內存、I/O等系統總體運行狀態。
vmstat [options] [delay [count]]
2、vmstat各字段說明
======================================================
[root@smiletest /]# vmstat
procs
-----------
memory-
--------- ---
swap-
- -----
io-
--- -
system
-- ------
cpu-
----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 3592 123600 127964 1229856 0 0 0 25 2 7 0 0 100 0 0
======================================================
一、procs
r:
表示
運行和等待CPU時間片的進程數(就是說多少個進程真的分配到CPU),這個值若是長期大於系統CPU個數,說明CPU不足,須要增長CPU
b:
表示在等待資源的進程數,好比正在等待I/O或者內存交換等。
二、memory
swpd:
表示
交換內存使用總量
,即虛擬內存已使用的大小(單位KB),若是大於0,表示你的機器物理內存不足了,若是不是程序內存泄露的緣由,那麼你該升級內存了或者把耗內存的任務遷移到其餘機器。
free:
表示當
前空閒的物理內存
buff:
表示baffers cached內存大小,也就是緩衝大小,通常對塊設備的讀寫才須要緩衝
Cache:
表示page cached的內存大小,也就是緩存大小,通常做爲文件系統進行緩衝,頻繁訪問的文件都會被緩存,若是cache值很是大說明緩存文件比較多,若是此時io中的bi比較小,說明文件系統效率比較好
三、swap
si:
數據進入swap中的數據速率(kb/s)
,若是這個值大於0,表示物理內存不夠用或者內存泄露了,要查找耗內存進程解決掉。
so
:
數據離開swap的速率(kb/s)
注意:
通常狀況下si、so的值都爲0,若是si、so的值長期不爲0,則說明系統內存不足,須要增長系統內存
四、io
bi:
從塊設備讀入數據到系統的速度,即讀磁盤,單位kb/s
bo:
表示寫到塊設備數據的總量,即寫磁盤,單位kb/s
注意:若是bi+bo的值過大,且wa值較大,則表示系統磁盤IO瓶頸
五、system
in:
表示某一時間間隔內觀測到的每秒設備終端數
cs:
表示每秒產生的 上下文切換次數,
例如咱們調用系統函數,就要進行上下文切換,線程的切換,也要進程上下文切換,這個值要越小越好,太大了,要考慮調低線程或者進程的數目,例如在apache和nginx這種web服務器中,咱們通常作性能測試時會進行幾千併發甚至幾萬併發的測試,選擇web服務器的進程能夠由進程或者線程的峯值一直下調,壓測,直到cs到一個比較小的值,這個進程和線程數就是比較合適的值了。系統調用也是,每次調用系統函數,咱們的代碼就會進入內核空間,致使上下文切換,這個是很耗資源,也要儘可能避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,致使CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
注意:
這兩個值越大,則由內核消耗的CPU就越多
六、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列的值
3、使用實踐
通常vmstat工具的使用是經過兩個數字參數來完成的,第一個參數是採樣的時間間隔數,單位是秒,第二個參數是採樣的次數,如:
[root@smiletest /]# vmstat 2 1
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 3592 124444 128008 1229888 0 0 0 25 2 7 0 0 100 0 0
2表示每一個兩秒採集一次服務器狀態,1表示只採集一次。