vmstat是Virtual Meomory Statistics(虛拟記憶體統計)的縮寫
vmstat指令可以對整個機器的程序、記憶體、頁面交換空間、磁盤IO、CPU活動進行監控。這些資訊反映了系統的負載情況。
不足之處是無法對某個程序進行深入分析。vmstat 5 8 #每5秒采樣一次,共采集8次
vmstat 10 #每10秒采樣一次
Linux 記憶體監控vmstat指令輸出分成六個部分:
(1)程序procs:
r:在運作隊列中等待的程序數 。
b:在等待io的程序數 。
(2)Linux 記憶體監控記憶體memoy:
swpd:現時可用的交換記憶體(機關KB)。
free:空閑的記憶體(機關KB)。
buff: 緩沖去中的記憶體數(機關:KB)。
cache:被用來做為高速緩存的記憶體數(機關:KB)。
(3) Linux 記憶體監控swap交換頁面
si: 從磁盤交換到記憶體的交換頁數量,機關:KB/秒。
so: 從記憶體交換到磁盤的交換頁數量,機關:KB/秒。
(4)Linux 記憶體監控 io塊裝置:
bi: 發送到塊裝置的塊數,機關:塊/秒。
bo: 從塊裝置接收到的塊數,機關:塊/秒。
(5)Linux 記憶體監控system系統:
in: 每秒的中斷數,包括時鐘中斷。
cs: 每秒的環境(上下文)轉換次數。
(6)Linux 記憶體監控cpu中央處理器:
cs:使用者程序使用的時間 。以百分比表示。
sy:系統程序使用的時間。 以百分比表示。
id:中央處理器的空閑時間 。以百分比表示。
假如 r經常大于 4(cpu核數) ,且id經常小于40,表示中央處理器的負荷很重。
假如bi,bo 長期不等于0,表示實體記憶體容量太小。
每個參數的含義:
Procs
r: The number of processes waiting for run time.等待運作時的程序數
b: The number of processes in uninterruptible sleep.不間斷睡眠中的程序數
Memory
swpd: the amount of virtual memory used.使用的虛拟記憶體量
free: the amount of idle memory.空閑記憶體量
buff: the amount of memory used as buffers.用作buffer的記憶體量
cache: the amount of memory used as cache.用作cache的記憶體量
inact: the amount of inactive memory. (-a option)非活動記憶體量
active: the amount of active memory. (-a option)活動記憶體量
Swap
si: Amount of memory swapped in from disk (/s).swap in
so: Amount of memory swapped to disk (/s).swap in
IO
bi: Blocks received from a block device (blocks/s). blocks in
bo: Blocks sent to a block device (blocks/s). blocks out
System
in: The number of interrupts per second, including the clock.每秒的中斷數,包括時鐘
cs: The number of context switches per second.每秒上下文切換次數
CPU
These are percentages of total CPU time.些是總CPU時間的百分比
us: Time spent running non-kernel code. (user time, including nice time)運作非核心代碼所花費的時間
sy: Time spent running kernel code. (system time)運作核心代碼所花費的時間
id: Time spent idle. Prior to Linux 2.5.41, this includes IO-wait time.空閑時間。在Linux 2.5.41之前,這包括IO等待時間。
wa: Time spent waiting for IO. Prior to Linux 2.5.41, included in idle.等待IO的時間。在Linux 2.5.41之前,包含在空閑狀态。
st: Time stolen from a virtual machine. Prior to Linux 2.6.11, unknown.從虛拟機中竊取的時間。在Linux 2.6.11之前,未知。
當運作隊列r值超過了CPU數目,就會出現CPU瓶頸了。如果運作隊列過大,表示你的CPU很繁忙,一般會造成CPU使用率很高。
b 表示阻塞的程序
swpd 虛拟記憶體已使用的大小
free 空閑的實體記憶體的大小
Linux/Unix的聰明之處,把空閑的實體記憶體的一部分拿來做檔案和目錄的緩存,是為了提高程式執行的性能,當程式使用記憶體時,buffer/cached會很快地被使用
cs 每秒上下文切換次數,例如調用系統函數,就要進行上下文切換,線程的切換,也要程序上下文切換,這個值要越小越好。太大了,要考慮調低線程或者程序的數目。例如在 apache 和 nginx 這種 web 伺服器中,做性能測試時會進行幾千并發甚至幾萬并發的測試,選擇web伺服器的程序可以由程序或者線程的峰值一直下調,壓測,直到cs到一個比較小的值,這個程序和線程數就是比較合适的值了。系統調用也是,每次調用系統函數,代碼就會進入核心空間,導緻上下文切換,這個很耗資源,也要盡量避免頻繁調用系統函數。上下文切換次數過多表示你的CPU大部分浪費在上下文切換,導緻CPU幹正經事的時間少了,CPU沒有充分利用,是不可取的。
一般來說,id + us + sy +wa= 100,一般認為id是空閑CPU使用率,us是使用者CPU使用率,sy是系統CPU使用率。