天天看點

vmstat詳解

一、前言

    vmstat指令是最常見的Linux/Unix監控工具,可以展現給定時間間隔的伺服器的狀态值,包括伺服器的CPU使用率,記憶體使用,虛拟記憶體交換情況,IO讀寫情況。

二、虛拟記憶體原理

    在系統中運作的每個程序都需要使用到記憶體,但不是每個程序都需要每時每刻使用系統配置設定的記憶體空間。當系統運作所需記憶體超過實際的實體記憶體,核心會釋放某些 程序所占用但未使用的部分或所有實體記憶體,将這部分資料存儲在磁盤上直到程序下一次調用,并将釋放出的記憶體提供給有需要的程序使用。

    在Linux記憶體管理中,主要是通過“調頁Paging”和“交換Swapping”來完成上述的記憶體排程。調頁算法是将記憶體中最近不常使用的頁面換到磁盤上,把活動頁面保留在記憶體中供程序使用。交換技術是将整個程序,而不是部分頁面,全部交換到磁盤上。

    分頁(Page)寫入磁盤的過程被稱作Page-Out,分頁(Page)從磁盤重新回到記憶體的過程被稱作Page-In。當核心需要一個分頁時,但發現此分頁不在實體記憶體中(因為已經被Page-Out了),此時就發生了分頁錯誤(Page Fault)。

    當系統核心發現可運作記憶體變少時,就會通過Page-Out來釋放一部分實體記憶體。經管Page-Out不是經常發生,但是如果Page-out頻繁不斷 的發生,直到當核心管理分頁的時間超過運作程式的時間時,系統效能會急劇下降。這時的系統已經運作非常慢或進入暫停狀态,這種狀态亦被稱作 thrashing(颠簸)。

三、vmstat用法說明

vmstat 

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

    -f:顯示從系統啟動至今的fork數量 。

    -m:顯示slabinfo

    -n:隻在開始時顯示一次各字段名稱。

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

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

    count:重新整理次數。如果不指定重新整理次數,但指定了重新整理時間間隔,就會一直重新整理,直到手動終止

    -d:顯示磁盤相關統計資訊。

    -p:顯示指定磁盤分區統計資訊 

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

示例:

[root@Master kernels]# vmstat

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      0 576236  88904 975596    0    0     3    19   16   15  0  0 99  0  0

[root@Master kernels]# vmstat -S M 1 5

 1  0      0    562     86    952    0    0     3    19   16   15  0  0 99  0  0

 0  0      0    562     86    952    0    0     0     0   20   16  0  0 100  0  0

 0  0      0    562     86    952    0    0     0     0   15   20  0  0 100  0  0

 0  0      0    562     86    952    0    0     0     0   13   20  0  0 100  0  0

 0  0      0    562     86    952    0    0     0     0   10   14  0  0 100  0  0

[root@Master kernels]# 

[root@Master kernels]# vmstat -S M 1 2

 0  0      0    562     86    952    0    0     0     0   21   18  0  0 100  0  0

[root@Master kernels]#

字段說明:

    procs:

        r:運作隊列中程序數量,一般不應該大于cpu數量,如果長期大于cpu數量,則考慮對cpu進行調優

        b:等待資源的程序數,如I/O等待

    memory:

        swpd:使用虛拟記憶體的大小,如果swpd的值不為0,但是si,so的值長期為0,這種情況不會影響系統性能,因為linux會主動去使用swap,在sysctl中有個參數為vm.swappiness,預設為60,在記憶體足夠時,建議設成0

        free:空閑實體記憶體大小

        buff:用作緩沖區的記憶體大小

        cache:用作緩存的記憶體大小

    swap:

        si:每秒從交換分區置換到記憶體的大小,由磁盤寫入記憶體

        so:每秒從記憶體置換到交換分區的大小,由記憶體寫入磁盤

        記憶體夠用的時候,這2個值都是0,如果這2個值長期大于0時,系統性能會受到影響,磁盤IO和CPU資源都會被消耗。

    io:

        bi:每秒讀取的塊數,在linux上可以通過tunefs來檢視塊大小,以計算每秒讀取的資料大小

        bo:每秒寫入的塊數

        這兩個值越大,CPU在IO等待的值就會越大

    system:

        in:每秒處理的中斷數,包括時鐘中斷

        cs:每秒上下文切換數

        這兩個值越大,則核心消息的CPU時間越大

    CPU:

        us:使用者程序消耗的cpu

        sy:核心系統程序消耗的cpu

        wa:IO等待造成的cpu消耗,如果該值高時,可能由于磁盤大量随機通路導緻,也可能是磁盤出現瓶頸

        id:空閑的cpu

本文轉自 dengaosky 51CTO部落格,原文連結:http://blog.51cto.com/dengaosky/1852644,如需轉載請自行聯系原作者

繼續閱讀