什麼是 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