vmstat是Virtual Meomory Statistics(虛擬內存統計)的縮寫,可對操做系統的虛擬內存、進程、CPU活動進行監控。他是對系統的總體狀況進行統計,不足之處是沒法對某個進程進行深刻分析。vmstat 工具提供了一種低開銷的系統性能觀察方式。由於 vmstat 自己就是低開銷工具,在很是高負荷的服務器上,你須要查看並監控系統的健康狀況,在控制窗口仍是可以使用vmstat 輸出結果。在學習vmstat命令前,咱們先了解一下Linux系統中關於物理內存和虛擬內存相關信息。 linux
物理內存和虛擬內存區別: 算法
咱們知道,直接從物理內存讀寫數據要比從硬盤讀寫數據要快的多,所以,咱們但願全部數據的讀取和寫入都在內存完成,而內存是有限的,這樣就引出了物理內存與虛擬內存的概念。 緩存
物理內存就是系統硬件提供的內存大小,是真正的內存,相對於物理內存,在linux下還有一個虛擬內存的概念,虛擬內存就是爲了知足物理內存的不足而提出的策略,它是利用磁盤空間虛擬出的一塊邏輯內存,用做虛擬內存的磁盤空間被稱爲交換空間(Swap Space)。 服務器
做爲物理內存的擴展,linux會在物理內存不足時,使用交換分區的虛擬內存,更詳細的說,就是內核會將暫時不用的內存塊信息寫到交換空間,這樣以來,物理內存獲得了釋放,這塊內存就能夠用於其它目的,當須要用到原始的內容時,這些信息會被從新從交換空間讀入物理內存。 app
linux的內存管理採起的是分頁存取機制,爲了保證物理內存能獲得充分的利用,內核會在適當的時候將物理內存中不常用的數據塊自動交換到虛擬內存中,而將常用的信息保留到物理內存。 工具
要深刻了解linux內存運行機制,須要知道下面提到的幾個方面: 性能
首先,Linux系統會不時的進行頁面交換操做,以保持儘量多的空閒物理內存,即便並無什麼事情須要內存,Linux也會交換出暫時不用的內存頁面。這能夠避免等待交換所需的時間。 學習
其次,linux進行頁面交換是有條件的,不是全部頁面在不用時都交換到虛擬內存,linux內核根據」最近最常用「算法,僅僅將一些不常用的頁面文件交換到虛擬內存,有時咱們會看到這麼一個現象:linux物理內存還有不少,可是交換空間也使用了不少。其實,這並不奇怪,例如,一個佔用很大內存的進程運行時,須要耗費不少內存資源,此時就會有一些不經常使用頁面文件被交換到虛擬內存中,但後來這個佔用不少內存資源的進程結束並釋放了不少內存時,剛纔被交換出去的頁面文件並不會自動的交換進物理內存,除非有這個必要,那麼此刻系統物理內存就會空閒不少,同時交換空間也在被使用,就出現了剛纔所說的現象了。關於這點,不用擔憂什麼,只要知道是怎麼一回事就能夠了。 優化
最後,交換空間的頁面在使用時會首先被交換到物理內存,若是此時沒有足夠的物理內存來容納這些頁面,它們又會被立刻交換出去,如此以來,虛擬內存中可能沒有足夠空間來存儲這些交換頁面,最終會致使linux出現假死機、服務異常等問題,linux雖然能夠在一段時間內自行恢復,可是恢復後的系統已經基本不可用了。 spa
所以,合理規劃和設計linux內存的使用,是很是重要的。
虛擬內存原理:
在系統中運行的每一個進程都須要使用到內存,但不是每一個進程都須要每時每刻使用系統分配的內存空間。當系統運行所需內存超過實際的物理內存,內核會釋放某些進程所佔用但未使用的部分或全部物理內存,將這部分資料存儲在磁盤上直到進程下一次調用,並將釋放出的內存提供給有須要的進程使用。
在Linux內存管理中,主要是經過「調頁Paging」和「交換Swapping」來完成上述的內存調度。調頁算法是將內存中最近不常使用的頁面換到磁盤上,把活動頁面保留在內存中供進程使用。交換技術是將整個進程,而不是部分頁面,所有交換到磁盤上。
分頁(Page)寫入磁盤的過程被稱做Page-Out,分頁(Page)從磁盤從新回到內存的過程被稱做Page-In。當內核須要一個分頁時,但發現此分頁不在物理內存中(由於已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。
當系統內核發現可運行內存變少時,就會經過Page-Out來釋放一部分物理內存。經管Page-Out不是常常發生,可是若是Page-out頻繁不斷的發生,直到當內核管理分頁的時間超過運行程式的時間時,系統效能會急劇降低。這時的系統已經運行很是慢或進入暫停狀態,這種狀態亦被稱做thrashing(顛簸)。
1.命令格式:
vmstat [-a] [-n] [-S unit] [delay [ count]]
vmstat [-s] [-n] [-S unit]
vmstat [-m] [-n] [delay [ count]]
vmstat [-d] [-n] [delay [ count]]
vmstat [-p disk partition] [-n] [delay [ count]]
vmstat [-f]
vmstat [-V]
2.命令功能:
用來顯示虛擬內存的信息
3.命令參數:
-a:顯示活躍和非活躍內存
-f:顯示從系統啓動至今的fork數量 。
-m:顯示slabinfo
-n:只在開始時顯示一次各字段名稱。
-s:顯示內存相關統計信息及多種系統活動數量。
delay:刷新時間間隔。若是不指定,只顯示一條結果。
count:刷新次數。若是不指定刷新次數,但指定了刷新時間間隔,這時刷新次數爲無窮。
-d:顯示磁盤相關統計信息。
-p:顯示指定磁盤分區統計信息
-S:使用指定單位顯示。參數有 k 、K 、m 、M ,分別表明1000、1024、1000000、1048576字節(byte)。默認單位爲K(1024 bytes)
-V:顯示vmstat版本信息。
4.輸出項
類別 |
項目 |
含義 |
說明 |
Procs |
r |
等待執行的任務數 |
展現了正在執行和等待CPU資源的任務個數。當這個值超過了CPU數目,就會出現CPU瓶頸了 |
|
b |
|
|
Memory |
swpd |
正在使用的swap大小單位K |
|
|
free |
空閒的內存空間 |
|
|
buff |
已使用的buff大小,對塊設備的讀寫進行緩衝 |
|
|
cache |
已使用的cache大小,文件系統的cache |
|
|
inact |
非活躍內存大小(當使用-a選項時顯示) |
|
|
active |
活躍的內存大小(當使用-a選項時顯示) |
|
Swap |
si |
交換內存使用,由磁盤調入內存 |
|
|
so |
交換內存使用,由內存調入磁盤 |
|
IO |
bi |
從塊設備讀入的數據總量(讀磁盤) (KB/s), |
|
|
bo |
寫入到塊設備的數據總理(寫磁盤) (KB/s) |
|
System |
in |
每秒產生的中斷次數 |
|
|
cs |
每秒產生的上下文切換次數 |
上面這2個值越大,會看到由內核消耗的CPU時間會越多 |
CPU |
us |
用戶進程消耗的CPU時間百分比 |
us 的值比較高時,說明用戶進程消耗的CPU時間多,可是若是長期超過50% 的使用,那麼咱們就該考慮優化程序算法或者進行加速了 |
|
sy |
內核進程消耗的CPU時間百分比 |
sy 的值高時,說明系統內核消耗的CPU資源多,這並非良性的表現,咱們應該檢查緣由。 |
|
id |
空閒 |
|
|
wa |
IO等待消耗的CPU時間百分比 |
wa 的值高時,說明IO等待比較嚴重,這多是因爲磁盤大量做隨機訪問形成,也有多是磁盤的帶寬出現瓶頸(塊操做)。 |
5.使用實例:
#vmstat 5 5
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
1 0 62792 3460 9116 88092 6 30 189 89 1061 569 17 28 54 2
0 0 62792 3400 9124 88092 0 00 14 884 434 4 14 81 0
0 0 62792 3400 9132 88092 0 00 14 877 424 4 15 81 0
1 0 62792 3400 9140 88092 0 00 14 868 418 6 20 74 0
1 0 62792 3400 9148 88092 0 00 15 847 400 9 25 67 0
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 ,且id常常小於40,表示中央處理器的負荷很重。 假如bi,bo 長期不等於0,表示物理內存容量過小