vmstat:一個標(biāo)準(zhǔn)的報(bào)告Linux系統(tǒng)虛擬內(nèi)存統(tǒng)計(jì)工具
什么是 RAM?
在智能手機(jī)世界,我們每一個人都知道 RAM。因此,我不想深入介紹,這樣我就簡要概括下。RAM 代表“隨機(jī)訪問內(nèi)存(Random Access Memory)”,是一種計(jì)算機(jī)數(shù)據(jù)存儲,它會存儲經(jīng)常使用的程序來提升系統(tǒng)性能。
什么是虛擬內(nèi)存?
虛擬內(nèi)存是一種內(nèi)存管理方式,計(jì)算機(jī)通過臨時將最近未使用的程序數(shù)據(jù)從 RAM 轉(zhuǎn)移到硬盤,以平衡或管理內(nèi)存的短缺。
什么是 vmstat?
vmstat 是一個標(biāo)準(zhǔn)的工具,它會報(bào)告 Linux 系統(tǒng)的虛擬內(nèi)存統(tǒng)計(jì)。vmstat 會報(bào)告有關(guān)進(jìn)程、內(nèi)存、分頁、塊 IO、陷阱(中斷)和 cpu 活動的信息。它可以幫助 Linux 管理員在解決問題時識別系統(tǒng)瓶頸。
在 Linux 中安裝 Sysstat
Linux 中沒有獨(dú)立的 vmstat 包。它與 sysstat 綁定在一起,并在大多數(shù)發(fā)行版的默認(rèn)倉庫上都有。如果還沒有安裝,只要基于你的發(fā)行版輸入下面的命令。
- [在 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
 
不帶參數(shù)運(yùn)行 vmstat
假設(shè)你已經(jīng)成功安裝 vmstat,在終端中不帶參數(shù)運(yùn)行 vmstat,它會向你展示 vmstat 的默認(rèn)結(jié)果。
- # 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
 
當(dāng)你看到上面的輸出,你可能已經(jīng)大致了解了它是什么以及它的目的。不要擔(dān)心,我們將深入解釋每個參數(shù),以便你可以了解 vmstat 的用途和目的。
procs:procs 中有 r 和 b 列,它報(bào)告進(jìn)程統(tǒng)計(jì)信息。在上面的輸出中,在運(yùn)行隊(duì)列(r)中有兩個進(jìn)程在等待 CPU 并有零個休眠進(jìn)程(b)。通常,它不應(yīng)該超過處理器(或核心)的數(shù)量,如果你發(fā)現(xiàn)異常,最好使用 top 命令進(jìn)一步地排除故障。
- r:等待運(yùn)行的進(jìn)程數(shù)。
 - b:休眠狀態(tài)下的進(jìn)程數(shù)。
 
memory: memory 下有報(bào)告內(nèi)存統(tǒng)計(jì)的 swpd、free、buff 和 cache 列。你可以用 free -m 命令看到同樣的信息。在上面的內(nèi)存統(tǒng)計(jì)中,統(tǒng)計(jì)數(shù)據(jù)以千字節(jié)表示,這有點(diǎn)難以理解,最好添加 M 參數(shù)來看到以兆字節(jié)為單位的統(tǒng)計(jì)數(shù)據(jù)。
- swpd:使用的虛擬內(nèi)存量。
 - free:空閑內(nèi)存量。
 - buff:用作緩沖區(qū)的內(nèi)存量。
 - cache:用作高速緩存的內(nèi)存量。
 - inact:非活動內(nèi)存的數(shù)量。
 - active:活動內(nèi)存量。
 
swap:swap 有 si 和 so 列,用于報(bào)告交換內(nèi)存統(tǒng)計(jì)信息。你可以用 free -m 命令看到相同的信息。
- si:從磁盤交換的內(nèi)存量(換入,從 swap 移到實(shí)際內(nèi)存的內(nèi)存)。
 - so:交換到磁盤的內(nèi)存量(換出,從實(shí)際內(nèi)存移動到 swap 的內(nèi)存)。
 
I/O:I/O 有 bi 和 bo 列,它以“塊讀取”和“塊寫入”的單位來報(bào)告每秒磁盤讀取和寫入的塊的統(tǒng)計(jì)信息。如果你發(fā)現(xiàn)有巨大的 I/O 讀寫,最好使用 iotop 和 iostat 命令來查看。
- bi:從塊設(shè)備接收的塊數(shù)。
 - bo:發(fā)送到塊設(shè)備的塊數(shù)。
 
system:system 有 in 和 cs 列,它報(bào)告每秒的系統(tǒng)操作。
- in:每秒的系統(tǒng)中斷數(shù),包括時鐘中斷。
 - cs:系統(tǒng)為了處理所以任務(wù)而上下文切換的數(shù)量。
 
CPU:CPU 有 us、sy、id 和 wa 列,報(bào)告(所用的) CPU 資源占總 CPU 時間的百分比。如果你發(fā)現(xiàn)異常,最好使用 top 和 free 命令。
- us:處理器在非內(nèi)核程序消耗的時間。
 - sy:處理器在內(nèi)核相關(guān)任務(wù)上消耗的時間。
 - id:處理器的空閑時間。
 - wa:處理器在等待IO操作完成以繼續(xù)處理任務(wù)上的時間。
 
以 MB 方式輸出
默認(rèn)情況下,vmstat 以千字節(jié)為單位顯示內(nèi)存統(tǒng)計(jì),這是非常難以理解的,最好添加 -S m 參數(shù)以獲取以兆字節(jié)為單位的統(tǒng)計(jì)。
- # 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
 
以延遲方式運(yùn)行 vmstat 獲取更好的統(tǒng)計(jì)信息
默認(rèn)情況下,vmstat 的單次統(tǒng)計(jì)信息不足以進(jìn)一步進(jìn)行故障排除,因此,添加更新延遲(延遲是更新之間的延遲,以秒為單位)以定期捕獲活動。如果你想以 2 秒延遲運(yùn)行 vmstat ,只需使用下面的命令(如果你想要更長的延遲,你可以根據(jù)你的愿望改變)。
以下命令將每 2 秒運(yùn)行一次,直到退出。
- # 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
 
帶延遲和計(jì)數(shù)運(yùn)行 vmstat
或者,你可以帶延遲和特定計(jì)數(shù)運(yùn)行 vmstat,一旦達(dá)到給定的計(jì)數(shù),然后自動退出。
以下命令將每 2 秒運(yùn)行一次,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
 
顯示活動和非活動內(nèi)存
默認(rèn)情況下,vmstat 會顯示除活動和非活動內(nèi)存之外的內(nèi)存統(tǒng)計(jì)信息。如果要查看活動和非活動內(nèi)存統(tǒng)計(jì)信息,請?jiān)?vmstat 后添加 -a 參數(shù)。
- # 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
 
打印磁盤統(tǒng)計(jì)
在 vmstat 后面添加 -d 參數(shù)會以每個磁盤一行的方式顯示統(tǒng)計(jì)(包含讀、寫和 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
 
總結(jié)磁盤統(tǒng)計(jì)
在 vmstat 后面添加 -D 會顯示全局統(tǒng)計(jì)(包括全部的磁盤、分區(qū)、全部讀、合并的讀、讀取的扇區(qū)、寫、合并的寫、寫入的扇區(qū)和 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
 
打印指定分區(qū)統(tǒng)計(jì)
vmstat 添加 -p 參數(shù)后面跟上設(shè)備名會顯示指定分區(qū)統(tǒng)計(jì)(包括讀、讀取的扇區(qū)、寫以及請求的寫)。
- # vmstat -p /dev/sdb1
 - sdb1 reads read sectors writes requested writes
 - 3115 27890 839453 206728016
 
vmstat 統(tǒng)計(jì)信息帶上時間戳
當(dāng)你想在特定時間區(qū)間內(nèi)找到內(nèi)存尖峰時,用 vmstat 命令添加 -t 參數(shù),后跟延遲和計(jì)數(shù)。
注意:此組合不適用于基于 Debian 的系統(tǒng)。
- # 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
 
打印更多統(tǒng)計(jì)
vmstat 后面跟上 -s 參數(shù)會顯示不同統(tǒng)計(jì)的總結(jié)。
- # 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 統(tǒng)計(jì)
vmstat 后面跟上 -m 參數(shù)會顯示 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
 - .
 - .
 - .
 
閱讀更多關(guān)于 vmstat
如果你想了解關(guān)于 vmstat 的更多選項(xiàng),請閱讀手冊。
- # vmstat --help
 - 或者
 - # man vmstat
 
作者簡介:
Magesh Maruthamuthu,熱愛玩所有的 Linux 發(fā)行版















 
 
 







 
 
 
 