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

2022-01-25 Linux
編譯自: http://www.2daygeek.com/linux-vmstat-command-examples-tool-report-virtual-memory-statistics/ 
作者: Magesh Maruthamuthu
譯者: geekpi

什麼是 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 命令[1]進一步地排除故障。

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

swpd:使用的虛擬內存量。

free:空閒內存量。

buff:用作緩衝區的內存量。

cache:用作高速緩存的內存量。

inact:非活動內存的數量。

active:活動內存量。

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

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

bi:從塊設備接收的塊數。

bo:發送到塊設備的塊數。

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

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

cs:發送到塊設備的塊數。

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

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

us:發送到塊設備的塊數。

sy:用作高速緩存的內存量。

id:非活動內存量。

wa:活動內存量。

以 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[4] 譯者:geekpi 校對:wxy

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

[1]: http://www.2daygeek.com/top-command-examples-to-monitor-server-
[2]: http://www.2daygeek.com/monitor-disk-io-activity-using-iotop-
[3]: http://www.2daygeek.com/monitor-disk-io-activity-using-iotop-
[4]: http://www.2daygeek.com/author/magesh/
[5]: https://github.com/LCTT/TranslateProject

相關焦點

  • Linux 下如何使用 vmstat 命令
    作者 | LinuxThings來源 | Linux開發那些事兒(ID:LinuxThings)vmstat 是 virtual memory statistics 的縮寫,它是Linux下一個非常有用的監控工具,除了內存之外,還提供 塊 IO、CPU
  • 通過vmstat學習CPU和進程性能監控
    vmstat是一個很全面的性能分析工具,可以觀察到系統的進程狀態、虛擬內存使用、磁碟的IO、中斷、上下文切換、CPU使用等情況。
  • Linux下查看內存使用情況方法總結
    CPU、內存、交換區及網絡的使用情況的視圖工具。它提供了所有進程的常駐內存大小、程序總內存大小、共享庫大小等的報告。列表可以水平及垂直滾動。(es) and shared libraries使用虛擬內存情況的命令。
  • Linux 下 CPU 監控工具
    11:15:41 up 82 days, 20:34, 8 users, load average: 0.28, 0.40, 0.4306. vmstatvmstat主要用於監控系統內存使用情況的工具,但是也包含一些CPU相關信息。使用方法vmstat 5 5表示運行5次,每次5秒。
  • vmstat和iostat命令監控linux性能
    vmstat 和 Iostat 這兩個命令都可用於所有主要 Unix-like (Linux/Unix/FreeBSD/Solaris) 作業系統。如果 vmstat 和 iostat 命令不存在請安裝 sysstat包。vmstat, sar 和 iostat 命令是包含在包中的集合 sysstat系統監控工具。這iostat 生成報告 CPU和所有設備統計信息。
  • 值得收藏的 14 個 Linux 下 CPU 監控工具
    11:15:41 up 82 days, 20:34, 8 users, load average: 0.28, 0.40, 0.4306. vmstatvmstat主要用於監控系統內存使用情況的工具,但是也包含一些CPU相關信息。使用方法vmstat 5 5表示運行5次,每次5秒。
  • 20個命令行工具監控 Linux 系統性能
    它也會顯示內存和 CPU 使用率過高的正在運行的進程。當我們對 Linux 系統需要去監控和採取正確的行動時,top 命令對於系統管理員是非常有用的。讓我們看下 top 命令的實際操作。# top2. vmstat — 虛擬內存統計vmstat 命令是用於顯示虛擬內存、內核線程、磁碟、系統進程、I/O 模塊、中斷、CPU 活躍狀態等更多信息。
  • 介紹15個Linux下 CPU 監控工具
    11:15:41 up 82 days, 20:34, 8 users, load average: 0.28, 0.40, 0.436. vmstatvmstat主要用於監控系統內存使用情況的工具,但是也包含一些CPU相關信息。使用方法vmstat 5 5表示運行5次,每次5秒。
  • 最常用的20個監控Linux系統性能的命令行工具
    2.vmstat — 虛擬內存統計vmstat 命令是用於顯示虛擬內存、內核線程、磁碟、系統進程、I/O 模塊、中斷、CPU 活躍狀態等更多信息。在默認的情況下,Linux 系統是沒有 vmstat 這個命令的,如果你要使用它,必須安裝一個包名叫 sysstat 的程序包。
  • 18個Linux命令行工具
    這條命令顯示了CPU的使用率、內存使用率、交換內存使用大小、高速緩存使用大小、緩衝區使用大小,進程PID、所使用命令以及其他。它還可以顯示正在運行進程的內存和CPU佔用多的情況。對系統管理員來說,top命令式是一個非常有用的,它可用於監控系統並在需要的時候採取正確的處理動作。讓我們看看實際中的top命令。# top2.
  • 每個系統管理員都要知道的 30 個 Linux 系統監控工具 | Linux 中國
    [1]2. vmstat - 虛擬內存統計vmstat 命令報告有關進程、內存、分頁、塊 IO、中斷和 CPU 活動等信息。獲取 Linux 的虛擬內存的內存頁大小(PAGESIZE)[5] 2. 限制 Linux 每個進程的 CPU 使用率[6] 3. 我的 Ubuntu 或 Fedora Linux 系統有多少內存?[7]7. iostat - CPU 平均負載和磁碟活動iostat 命令用於匯報 CPU 的使用情況,以及設備、分區和網絡文件系統(NFS)的 IO 統計信息。
  • 虛擬內存
    紅客突擊隊虛擬內存前言繼續閱讀《深入理解計算機系統
  • 這些排查內存問題的命令,你用過多少?
    我相信大家都遇到過內存佔用率過高的情況,在排查過程中,我們會用到一些命令或工具,下面來看下這些你都用過嗎?vmstavmstat 命令vmstat 命令可以展現給定時間間隔的伺服器的狀態值,包括伺服器的CPU使用率、內存使用、虛擬內存交換情況、IO讀寫情況。
  • Linux如何查看內存的使用情況?
    Linux查看內存使用情況:vmstat命令vmstat 命令在監控系統內存方面的功能很強大,有關此命令的基本用法,已經在《Linux vmstat命令》一節中做了詳細介紹,這裡重點講解如何使用此命令查看內存的使用狀況。
  • Linux性能測試工具
    在Linux系統中,所有的運行參數保存在虛擬目錄/proc中,換句話說,我們使用的性能監控工具取到的數據值實際上就是源自於這個目錄,當涉及到系統高估時,我們就可以修改/proc目錄中的相關參數了,當然有些是不能亂改的。下面就讓我們了解一下這些常用的性能監控工具。
  • pidstat - 監控並統計Linux進程的數據
    它的值為0(或者沒有參數)說明進程的統計數據的時間是從系統啟動開始計算的。 如何安裝pidstatpidstat 是sysstat軟體套件的一部分,sysstat包含很多監控linux系統狀態的工具,它能夠從大多數linux發行版的軟體源中獲得。
  • 虛擬內存精粹
    導言 虛擬內存是當今計算機系統中最重要的抽象概念之一,它的提出是為了更加有效地管理內存並且降低內存出錯的概率。虛擬內存影響著計算機的方方面面,包括硬體設計、文件系統、共享對象和進程/線程調度等等,每一個致力於編寫高效且出錯概率低的程序的程式設計師都應該深入學習虛擬內存。