作者 | LinuxThings
來源 | Linux開發那些事兒(ID:LinuxThings)vmstat 是 virtual memory statistics 的縮寫,它是Linux下一個非常有用的監控工具,除了內存之外,還提供 塊 IO、CPU 時間 等額外的信息
vmstat 命令的執行不需要特殊的權限,普通用戶就可以執行,其語法形式如下
vmstat [options] [delay [count]]delay 表示數據更新間隔,單位是秒,如果沒有指定此值,表示系統啟動以來的平均時間,而且此時只輸出一次結果
count 表示輸出次數,如果沒有指定該值,但是指定了 delay 的值,則表示無限次
結果欄位說明在命令行輸入 vmstat 並回車, 會輸出一次結果
[root@cghost22 ~]# vmstat
procs -memory ---swap-- io---- -system-- -cpu
r b swpd free buff cache si so bi bo in cs us sy id wa st
3 0 0 991324 932 537336 0 0 0 0 3 4 0 0 100 0 0
[root@cghost22 ~]#結果中有許多的欄位,下表列出了每個欄位的詳細說明
欄位說明r可運行進程的數量,包括運行態和就緒態b處於不可中斷睡眠狀態的進程數量swpd虛擬內存使用量free空閒內存buff用作buffer的內存數量cache用作cache的內存數量si從磁碟換入內存的數量so從內存換出到磁碟的數量bi從塊設備接收的塊,單位:塊/秒bo發送到塊設備的塊,單位:塊/秒in每秒中斷數,包括時鐘中斷cs每秒上下文切換數us用戶態執行時間sy內核態執行時間idCPU空閒時間wa等待IO的時間st從虛擬機中偷取的時間表中第二行 處於不可中斷睡眠狀態的進程數量,這裡的不可中斷是指 一個進程在執行某些系統調用時進入的狀態,在這種狀態下,進程被阻塞,並且不能被中斷,直到完成系統調用
欄位結果按照顏色分成了幾部分,從上到下依次是:進程信息,內存信息,IO信息,系統中斷和上下文,CPU時間
內存信息中數值的單位默認是 KB ( 1024 kbytes ), CPU時間欄位並不表示具體的時間,而是佔總CPU時間的一個百分比
常見選項選項說明-a顯示活躍和非活躍內存-f從系統啟動至今 fork 的數量,包括 fork、vfork 以及 clone 等系統調用-s顯示系統事件計數以及內存統計信息-d報告磁碟統計信息-D統計活動磁碟信息-p指定分區的詳細信息-t追加一列時間顯示-S按照指定字節單位顯示-w結果按照寬模式顯示-Vvmstat的版本常見用法vmstat 命令主要用於識別系統的瓶頸,統計數據的時候,它不會包含自身進程
[root@cghost22 ~]$ 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 st
2 0 12552 148356 234324 3382956 0 0 1 21 4 4 2 2 97 0 0
1 0 12552 148264 234324 3382980 0 0 0 0 14974 27478 3 2 96 0 0
1 0 12552 148232 234324 3382984 0 0 0 14 14384 27181 3 2 96 0 0
0 0 12552 148376 234332 3383052 0 0 0 204 14197 26812 4 2 94 0 0
0 0 12552 148512 234332 3383088 0 0 0 4 14398 27155 3 2 95 0 0
0 0 12552 147892 234332 3383128 0 0 0 210 15515 28802 3 2 95 0 0
1 0 12552 148388 234332 3383156 0 0 0 0 15147 28042 3 2 95 0 0
0 0 12552 148264 234332 3383168 0 0 0 4 14380 27395 3 1 96 0 0
0 0 12552 148264 234336 3383216 0 0 0 198 14430 27008 3 1 95 0 0
2 0 12552 148140 234336 3383252 0 0 0 6 14233 27161 3 2 95 0 02 表示每隔 2 秒輸出一次結果,10 表示總共輸出 10 次,10 次之後程序自動結束
輸出的結果中,內存數據的單位默認是 KB,可以通過 -S 選項調整顯示的單位,有下面幾種單位可供選擇
注意:-S 選項對 si、 so 欄位無效
k # 1000 bytes
K # 1024 bytes
m # 1000 * 1000 bytes
M # 1024 * 1024 bytes上圖中第一個結果中內存數據顯示單位是 KB , 第二個結果中單位是 MB,將第一個結果對應欄位的數值除以 1024 就得到了第二個結果
inact 是非活躍內存,active 是活躍內存
活躍內存是進程在使用的內存,非活躍內存是未運行進程的內存
這裡的 fork 數量包括 fork、vfork 以及 clone 等系統調用
[root@cghost22 ~]# vmstat -f
12714 forks
[root@cghost22 ~]# vmstat -f
12715 forks
[root@cghost22 ~]# vmstat -f
12716 forks我們每次在控制臺執行一次命令,系統就會 fork 一個新的進程來執行命令,比如像上面的例子,每執行一次 vmstat -f 命令,系統就會 fork 一個新進程
這個選項還可以用於統計某個操作消耗多少次 fork 調用,只需要在操作前後各執行一次 vmstat -f 命令,比較兩次結果的差值即可
追加一列時間顯示,有助於比較一段時間內的結果
vmstat 結果中的某些欄位的數字有時會比較長,而且跟欄位名的位置有偏差, 不太適合人類的觀看習慣,-w 選項可以按照寬模式顯示數據,使結果看起來更直觀,下圖是分別未使用寬模式和使用了寬模式的一個對比
磁碟信息主要分三個方面:讀、寫、IO ,讀和寫以毫秒為單位,IO以秒為單位
讀
total: 成功讀取的總數
merged: 分組讀取(產生一個 IO)
sectors: 成功讀取的扇區數
ms: 讀取花費的毫秒
寫
total: 成功寫入的總數
merged: 分組寫入(產生一個 IO)
sectors: 成功寫入的扇區數
ms: 寫花費的毫秒
IO
cur: 正在進行的IO
s: IO花費的秒數上圖中,輸出結果顯示 sda3 分區設備的信息,它們包括:讀計數、讀取的扇區數,寫計數,分區寫請求總數