Linux中國

vmstat:一個標準的報告虛擬內存統計工具

在 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 中有 rb 列,它報告進程統計信息。在上面的輸出中,在運行隊列(r)中有兩個進程在等待 CPU 並有零個休眠進程(b)。通常,它不應該超過處理器(或核心)的數量,如果你發現異常,最好使用 top 命令進一步地排除故障。

  • r:等待運行的進程數。
  • b:休眠狀態下的進程數。

memory: memory 下有報告內存統計的 swpdfreebuffcache 列。你可以用 free -m 命令看到同樣的信息。在上面的內存統計中,統計數據以千位元組表示,這有點難以理解,最好添加 M 參數來看到以兆位元組為單位的統計數據。

  • swpd:使用的虛擬內存量。
  • free:空閑內存量。
  • buff:用作緩衝區的內存量。
  • cache:用作高速緩存的內存量。
  • inact:非活動內存的數量。
  • active:活動內存量。

swap:swap 有 siso 列,用於報告交換內存統計信息。你可以用 free -m 命令看到相同的信息。

  • si:從磁碟交換的內存量(換入,從 swap 移到實際內存的內存)。
  • so:交換到磁碟的內存量(換出,從實際內存移動到 swap 的內存)。

I/O:I/O 有 bibo 列,它以「塊讀取」和「塊寫入」的單位來報告每秒磁碟讀取和寫入的塊的統計信息。如果你發現有巨大的 I/O 讀寫,最好使用 iotopiostat 命令來查看。

  • bi:從塊設備接收的塊數。
  • bo:發送到塊設備的塊數。

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

  • in:每秒的系統中斷數,包括時鐘中斷。
  • cs:系統為了處理所以任務而上下文切換的數量。

CPU:CPU 有 ussyidwa 列,報告(所用的) CPU 資源佔總 CPU 時間的百分比。如果你發現異常,最好使用 topfree 命令。

  • us:處理器在非內核程序消耗的時間。
  • sy:處理器在內核相關任務上消耗的時間。
  • id:處理器的空閑時間。
  • wa:處理器在等待IO操作完成以繼續處理任務上的時間。

以 MB 方式輸出

默認情況下,vmstat 以千位元組為單位顯示內存統計,這是非常難以理解的,最好添加 -S m 參數以獲取以兆位元組為單位的統計。

# vmstat -S m
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 1  0    103    371    406   2116    0    0    40    15    0    0 11  1 87  0

以延遲方式運行 vmstat 獲取更好的統計信息

默認情況下,vmstat 的單次統計信息不足以進一步進行故障排除,因此,添加更新延遲(延遲是更新之間的延遲,以秒為單位)以定期捕獲活動。如果你想以 2 秒延遲運行 vmstat ,只需使用下面的命令(如果你想要更長的延遲,你可以根據你的願望改變)。

以下命令將每 2 秒運行一次,直到退出。

# vmstat 2
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 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
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu- r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 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
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu- 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)。

# vmstat -D
           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 發行版

via: http://www.2daygeek.com/linux-vmstat-command-examples-tool-report-virtual-memory-statistics/

作者:Magesh Maruthamuthu 譯者:geekpi 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出


本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

對這篇文章感覺如何?

太棒了
0
不錯
0
愛死了
0
不太好
0
感覺很糟
0
雨落清風。心向陽

    You may also like

    Leave a reply

    您的電子郵箱地址不會被公開。 必填項已用 * 標註

    此站點使用Akismet來減少垃圾評論。了解我們如何處理您的評論數據

    More in:Linux中國