天天看點

vmstat:一個标準的報告Linux系統虛拟記憶體統計工具

vmstat:一個标準的報告Linux系統虛拟記憶體統計工具

什麼是 ram?

在智能手機世界,我們每一個人都知道 ram。是以,我不想深入介紹,這樣我就簡要概括下。ram 代表“随機通路記憶體(random access memory)”,是一種計算機資料存儲,它會存儲經常使用的程式來提升系統性能。

什麼是虛拟記憶體?

虛拟記憶體是一種記憶體管理方式,計算機通過臨時将最近未使用的程式資料從 ram 轉移到硬碟,以平衡或管理記憶體的短缺。

什麼是 vmstat?

vmstat 是一個标準的工具,它會報告 linux 系統的虛拟記憶體統計。vmstat 會報告有關程序、記憶體、分頁、塊 io、陷阱(中斷)和 cpu 活動的資訊。它可以幫助 linux 管理者在解決問題時識别系統瓶頸。

在 linux 中安裝 sysstat

linux 中沒有獨立的 vmstat 包。它與 sysstat 綁定在一起,并在大多數發行版的預設倉庫上都有。如果還沒有安裝,隻要基于你的發行版輸入下面的指令。

[在 centos/rhel 中安裝 vmstat] 

$ sudo yum install sysstat 

[在 fedora 中安裝 vmstat] 

$ sudo dnf install sysstat 

[在 debian/ubuntu 中安裝 vmstat] 

$ sudo apt-get install sysstat 

[在 arch linux 中安裝 vmstat] 

$ sudo pacman -s sysstat 

[在 mageia 中安裝 vmstat] 

$ sudo urpmi sysstat 

[在 opensuse 中安裝 vmstat] 

$ sudo zypper install sysstat 

不帶參數運作 vmstat

假設你已經成功安裝 vmstat,在終端中不帶參數運作 vmstat,它會向你展示 vmstat 的預設結果。

# vmstat 

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- 

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa 

 2  0  79496 1614120 139240 787928   0    0    23    10    0    0 11  1 88  0 

當你看到上面的輸出,你可能已經大緻了解了它是什麼以及它的目的。不要擔心,我們将深入解釋每個參數,以便你可以了解 vmstat 的用途和目的。

procs:procs 中有 r 和 b 列,它報告程序統計資訊。在上面的輸出中,在運作隊列(r)中有兩個程序在等待 cpu 并有零個休眠程序(b)。通常,它不應該超過處理器(或核心)的數量,如果你發現異常,最好使用 top 指令進一步地排除故障。

r:等待運作的程序數。

b:休眠狀态下的程序數。

memory: memory 下有報告記憶體統計的 swpd、free、buff 和 cache 列。你可以用 free -m 指令看到同樣的資訊。在上面的記憶體統計中,統計資料以千位元組表示,這有點難以了解,最好添加 m 參數來看到以兆位元組為機關的統計資料。

swpd:使用的虛拟記憶體量。

free:空閑記憶體量。

buff:用作緩沖區的記憶體量。

cache:用作高速緩存的記憶體量。

inact:非活動記憶體的數量。

active:活動記憶體量。

swap:swap 有 si 和 so 列,用于報告交換記憶體統計資訊。你可以用 free -m 指令看到相同的資訊。

si:從磁盤交換的記憶體量(換入,從 swap 移到實際記憶體的記憶體)。

so:交換到磁盤的記憶體量(換出,從實際記憶體移動到 swap 的記憶體)。

i/o:i/o 有 bi 和 bo 列,它以“塊讀取”和“塊寫入”的機關來報告每秒磁盤讀取和寫入的塊的統計資訊。如果你發現有巨大的 i/o 讀寫,最好使用 iotop 和 iostat 指令來檢視。

bi:從塊裝置接收的塊數。

bo:發送到塊裝置的塊數。

system:system 有 in 和 cs 列,它報告每秒的系統操作。

in:每秒的系統中斷數,包括時鐘中斷。

cs:系統為了處理是以任務而上下文切換的數量。

cpu:cpu 有 us、sy、id 和 wa 列,報告(所用的) cpu 資源占總 cpu 時間的百分比。如果你發現異常,最好使用 top 和 free 指令。

us:處理器在非核心程式消耗的時間。

sy:處理器在核心相關任務上消耗的時間。

id:處理器的空閑時間。

wa:處理器在等待io操作完成以繼續處理任務上的時間。

以 mb 方式輸出

預設情況下,vmstat 以千位元組為機關顯示記憶體統計,這是非常難以了解的,最好添加 -s m 參數以擷取以兆位元組為機關的統計。

# vmstat -s m 

 1  0    103    371    406   2116    0    0    40    15    0    0 11  1 87  0 

以延遲方式運作 vmstat 擷取更好的統計資訊

預設情況下,vmstat 的單次統計資訊不足以進一步進行故障排除,是以,添加更新延遲(延遲是更新之間的延遲,以秒為機關)以定期捕獲活動。如果你想以 2 秒延遲運作 vmstat ,隻需使用下面的指令(如果你想要更長的延遲,你可以根據你的願望改變)。

以下指令将每 2 秒運作一次,直到退出。

# vmstat 2 

 1  0 105500 325776 416016 2166912   0    0    40    15    0    0 11  1 87  0 

 0  0 105500 325644 416016 2166920   0    0     0    13 1083 1174 11  1 87  0 

 0  0 105500 308648 416024 2166928   0    0     1    16 1559 1453 16  2 82  0 

 0  0 105500 285948 416032 2166932   0    0     0    12  934 1003  9  1 90  0 

 0  0 105500 326620 416040 2166940   0    0     1    27  922 1068  9  1 90  0 

 0  0 105500 366704 416048 2166944   0    0     0    17  835  955  9  1 90  0 

 0  0 105500 366456 416056 2166948   0    0     1    22  859  918  9  1 90  0 

 0  0 105500 366456 416056 2166948   0    0     0    15 1539 1504 17  2 81  0 

 0  0 105500 365224 416060 2166996   0    0     1    19  984 1097 11  1 88  0 

帶延遲和計數運作 vmstat

或者,你可以帶延遲和特定計數運作 vmstat,一旦達到給定的計數,然後自動退出。

以下指令将每 2 秒運作一次,10 次後自動退出。

# vmstat 2 10 

 1  0  79496 1581916 157380 810412   0    0    23    10    0    1 11  1 88  0 

 2  0  79496 1559464 157380 810416   0    0     1     1 1821 1749 21  2 77  0 

 0  0  79496 1583768 157384 810416   0    0     1    46  681  799  9  1 90  0 

 2  0  79496 1556364 157384 810428   0    0     1     1 1392 1545 15  2 83  0 

 0  0  79496 1583272 157384 810428   0    0     1     0 1307 1448 14  2 84  0 

 2  0  79496 1582032 157384 810428   0    0     1    41  424  605  4  1 96  0 

 1  0  79496 1575848 157384 810428   0    0     1     0 1912 2407 26  2 71  0 

 0  0  79496 1582884 157384 810436   0    0     1    69  678  825  9  1 90  0 

 2  0  79496 1569368 157392 810432   0    0    11    26  920  969  9  1 90  0 

 1  0  79496 1583612 157400 810444   0    0     7    39 2001 2530 20  2 77  0 

顯示活動和非活動記憶體

預設情況下,vmstat 會顯示除活動和非活動記憶體之外的記憶體統計資訊。如果要檢視活動和非活動記憶體統計資訊,請在 vmstat 後添加 -a 參數。

# vmstat -a 

 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa 

 1  0 105500 2387592 415148 584112   0    0    40    15    0    1 11  1 87  0 

列印磁盤統計

在 vmstat 後面添加 -d 參數會以每個磁盤一行的方式顯示統計(包含讀、寫和 io)。

# vmstat -d 

disk- ------------reads------------ ------------writes----------- -----io------ 

       total merged sectors      ms  total merged sectors      ms    cur    sec 

ram0       0      0       0       0      0      0       0       0      0      0 

ram1       0      0       0       0      0      0       0       0      0      0 

ram2       0      0       0       0      0      0       0       0      0      0 

ram3       0      0       0       0      0      0       0       0      0      0 

ram4       0      0       0       0      0      0       0       0      0      0 

ram5       0      0       0       0      0      0       0       0      0      0 

ram6       0      0       0       0      0      0       0       0      0      0 

ram7       0      0       0       0      0      0       0       0      0      0 

ram8       0      0       0       0      0      0       0       0      0      0 

ram9       0      0       0       0      0      0       0       0      0      0 

ram10      0      0       0       0      0      0       0       0      0      0 

ram11      0      0       0       0      0      0       0       0      0      0 

ram12      0      0       0       0      0      0       0       0      0      0 

ram13      0      0       0       0      0      0       0       0      0      0 

ram14      0      0       0       0      0      0       0       0      0      0 

ram15      0      0       0       0      0      0       0       0      0      0 

loop0      0      0       0       0      0      0       0       0      0      0 

loop1      0      0       0       0      0      0       0       0      0      0 

loop2      0      0       0       0      0      0       0       0      0      0 

loop3      0      0       0       0      0      0       0       0      0      0 

loop4      0      0       0       0      0      0       0       0      0      0 

loop5      0      0       0       0      0      0       0       0      0      0 

loop6      0      0       0       0      0      0       0       0      0      0 

loop7      0      0       0       0      0      0       0       0      0      0 

fd0        0      0       0       0      0      0       0       0      0      0 

sda   16604050 904497 2594882190 57455732 30037054 28093770 2160032056 118189160      0  40915 

sdb   257357577 479985 3124712204 577235320 8502519 1283237 36645890 11250948      0 182336 

總結磁盤統計

在 vmstat 後面添加 -d 會顯示全局統計(包括全部的磁盤、分區、全部讀、合并的讀、讀取的扇區、寫、合并的寫、寫入的扇區和 io)。

           27 disks 

            3 partitions 

    275754028 total reads 

      1388030 merged reads 

   5751195976 read sectors 

    638710116 milli reading 

     38795040 writes 

     29520659 merged writes 

   2209820333 written sectors 

    130210652 milli writing 

            0 inprogress io 

       224704 milli spent io 

列印指定分區統計

vmstat 添加 -p 參數後面跟上裝置名會顯示指定分區統計(包括讀、讀取的扇區、寫以及請求的寫)。

# vmstat -p /dev/sdb1 

sdb1          reads   read sectors  writes    requested writes 

                3115      27890     839453  206728016 

vmstat 統計資訊帶上時間戳

當你想在特定時間區間内找到記憶體尖峰時,用 vmstat 指令添加 -t 參數,後跟延遲和計數。

注意:此組合不适用于基于 debian 的系統。

# vmstat -t 1 5 

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------ ---timestamp--- 

 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st 

 0  0      0 6981416 181324 24588604    0    0     0     1    0    0  0  0 100  0  0    2017-01-11 15:42:15 mst 

 2  0      0 6981276 181324 24588604    0    0     0     0   91   40  0  0 100  0  0    2017-01-11 15:42:16 mst 

 0  0      0 6982016 181324 24588604    0    0     0     0   75  116  0  0 100  0  0    2017-01-11 15:42:17 mst 

 0  0      0 6982016 181324 24588604    0    0     0     0   43   39  0  0 100  0  0    2017-01-11 15:42:18 mst 

 0  0      0 6982280 181324 24588604    0    0     0     0  113  185  0  0 100  0  0    2017-01-11 15:42:19 mst 

列印更多統計

vmstat 後面跟上 -s 參數會顯示不同統計的總結。

# vmstat -s 

     32849392  total memory 

     25864128  used memory 

     16468180  active memory 

      8320888  inactive memory 

      6985264  free memory 

       181324  buffer memory 

     24588612  swap cache 

     20970492  total swap 

            0  used swap 

     20970492  free swap 

       891075 non-nice user cpu ticks 

         6532 nice user cpu ticks 

      1507099 system cpu ticks 

  18925265601 idle cpu ticks 

       113043 io-wait cpu ticks 

          108 irq cpu ticks 

         4185 softirq cpu ticks 

            0 stolen cpu ticks 

      4071862 pages paged in 

    216759718 pages paged out 

            0 pages swapped in 

            0 pages swapped out 

    369611221 interrupts 

    477861261 cpu context switches 

   1478258826 boot time 

      2196121 forks 

列印 slab 統計

vmstat 後面跟上 -m 參數會顯示 slab 資訊。

# vmstat -m 

cache                       num  total   size  pages 

nf_conntrack_expect           0      0    240     16 

nf_conntrack_ffffffff81b2a920     18     60    312     12 

fib6_nodes                   24     59     64     59 

ip6_dst_cache                16     30    384     10 

ndisc_cache                   7     30    256     15 

ip6_mrt_cache                 0      0    128     30 

rawv6                        35     35   1088      7 

udplitev6                     0      0   1024      4 

udpv6                         4     12   1024      4 

tw_sock_tcpv6                 0      0    320     12 

request_sock_tcpv6            0      0    192     20 

tcpv6                         4      6   1920      2 

fat_inode_cache               5      6    672      6 

fat_cache                     0      0     32    112 

ioat2                      4096   4140    128     30 

ext4_inode_cache          34322  34364   1000      4 

ext4_xattr                    0      0     88     44 

閱讀更多關于 vmstat

如果你想了解關于 vmstat 的更多選項,請閱讀手冊。

# vmstat --help 

或者 

# man vmstat 

作者簡介:

magesh maruthamuthu,熱愛玩所有的 linux 發行版

作者:magesh maruthamuthu

來源:51cto

繼續閱讀