[linux]vmstat命令詳解-顯示虛擬內存狀態


本文轉載於http://man.linuxde.net/vmstat

前言:Linux系統的內存分為物理內存和虛擬內存兩種。物理內存是真實的,也就是物理內存條上的內存。而虛擬內存則是采用硬盤空間補充物理內存,將暫時不使用的內存頁寫到硬盤上以騰出更多的物理內存讓有需要的進程使用。當這些已被騰出的內存頁需要再次使用時才從硬盤(虛擬內存)中讀回內存。這一切對於用戶來說是透明的。通常對Linux系統來說,虛擬內存就是swap分區。

 

vmstat命令的含義為顯示虛擬內存狀態(“Viryual Memor Statics”),但是它可以報告關於進程、內存、I/O等系統整體運行狀態。

語法

vmstat(選項)(參數)

選項

 

選項 解釋 實例用法 實例解釋
vmstat [-a] [-n] [delay [ count]]

-a:顯示活動內頁

-n:頭信息僅顯示一次

vmstat -a

查看內存的active和inactive

注:inact和active的數據來自於/proc/meminfo

vmstat [-f] [-s] [-m]

-f:顯示啟動后創建的進程總數

-s:以表格方式顯示事件計數器和內存狀態

-m:顯示slab信息

vmstat -f

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

vmstat -s

vmstat -f查看系統已經fork了多少次

1872 forks
注:這個數據是從/proc/stat中的processes字段里取得的

 

vmstat -s截圖:

 

注:這些信息的分別來自於/proc/meminfo,/proc/stat和/proc/vmstat

vmstat [-V]      
vmstat [-D]      
vmstat [-d] -d:報告磁盤狀態  vmstat -d  

注:這些信息主要來自於/proc/diskstats.
merged:表示一次來自於合並的寫/讀請求,一般系統會把多個連接/鄰近的讀/寫請求合並到一起來操作

vmstat [-p disk partition] -p:顯示指定的硬盤分區狀態  vmstat -p /dev/sda1

查看/dev/sda1磁盤的讀/寫

 

注:這些信息主要來自於/proc/diskstats
reads:來自於這個分區的讀的次數.
read sectors:來自於這個分區的讀扇區的次數.
writes:來自於這個分區的寫的次數.
requested writes:來自於這個分區的寫請求次數.

vmstat [-S unit]  -S:輸出信息的單位    


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

參數

  • 事件間隔:狀態信息刷新的時間間隔;
  • 次數:顯示報告的次數。

實例

命令:vmstat 3
注:每兩秒打印一次信息 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 320 42188 167332 1534368 0 0 4 7 1 0 0 0 99 0 0 0 0 320 42188 167332 1534392 0 0 0 0 1002 39 0 0 100 0 0 0 0 320 42188 167336 1534392 0 0 0 19 1002 44 0 0 100 0 0 0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0 0 0 320 42188 167336 1534392 0 0 0 0 1002 41 0 0 100 0 0

截圖:
 

一般vmstat工具的使用是通過兩個數字參數來完成的,第一個參數是采樣的時間間隔數,單位是秒,第二個參數是采樣的次數。
命令:vmstat 2 3
注:每2秒打印一次信息,共打印3次

 

 

字段說明:

截圖:

       

    對於內存監控,需關心的指標包括:swpd、free、buff、cache、si和so,尤其需要重視的是free、si和so。很多人都會認為系統的空閑內存(free)少就代表系統性能有問題,其實並不是這樣的,這還要結合si和so(內存和磁盤的頁面交換)兩個指標進行分析。正常來說,當物理內存能滿足系統需要的話(也就是說物理內存能足以存放所有進程的數據),那么物理內存和磁盤(虛擬內存)是不應該存在頻繁的頁面交換操作的,只有當物理內存不能滿足需要時系統才會把內存中的數據交換到磁盤中。而由於磁盤的性能是比內存慢很多的,所以如果存在大量的頁面交換,那么系統的性能必然會受到很大影響。

    

Procs(進程)

  • r: 運行隊列中進程數量,這個值也可以判斷是否需要增加CPU。(長期大於1)
  • b: 等待IO的進程數量。

Memory(內存)

  • swpd: 使用虛擬內存大小,如果swpd的值不為0,但是SI,SO的值長期為0,這種情況不會影響系統性能。
  • free: 空閑物理內存大小。
  • buff: 用作緩沖的內存大小。
  • cache: 用作緩存的內存大小,如果cache的值大的時候,說明cache處的文件數多,如果頻繁訪問到的文件都能被cache處,那么磁盤的讀IO bi會非常小。

Swap

  • si: 每秒從交換區寫到內存的大小,由磁盤調入內存。
  • so: 每秒寫入交換區的內存大小,由內存調入磁盤。

注意:內存夠用的時候,這2個值都是0,如果這2個值長期大於0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。有些朋友看到空閑內存(free)很少的或接近於0時,就認為內存不夠用了,不能光看這一點,還要結合si和so,如果free很少,但是si和so也很少(大多時候是0),那么不用擔心,系統性能這時不會受到影響的。

IO(現在的Linux版本塊的大小為1kb)

  • bi: 每秒讀取的塊數
  • bo: 每秒寫入的塊數

注意:隨機磁盤讀寫的時候,這2個值越大(如超出1024k),能看到CPU在IO等待的值也會越大。

system(系統)

  • in: 每秒中斷數,包括時鍾中斷。
  • cs: 每秒上下文切換數。

注意:上面2個值越大,會看到由內核消耗的CPU時間會越大。

CPU(以百分比表示)

  • us: 用戶進程執行時間百分比(user time)

us的值比較高時,說明用戶進程消耗的CPU時間多,但是如果長期超50%的使用,那么我們就該考慮優化程序算法或者進行加速。

  • sy: 內核系統進程執行時間百分比(system time)

sy的值高時,說明系統內核消耗的CPU資源多,這並不是良性表現,我們應該檢查原因。

  • wa: IO等待時間百分比

wa的值高時,說明IO等待比較嚴重,這可能由於磁盤大量作隨機訪問造成,也有可能磁盤出現瓶頸(塊操作)。

  • id: 空閑時間百分比


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM