Linux 下如何使用 vmstat 命令
語法
vmstat 命令的執(zhí)行不需要特殊的權(quán)限,普通用戶就可以執(zhí)行,其語法形式如下:
vmstat [options] [delay [count]]
??delay?
? 表示數(shù)據(jù)更新間隔,單位是秒,如果沒有指定此值,表示系統(tǒng)啟動以來的平均時間,而且此時只輸出一次結(jié)果
??count?
? 表示輸出次數(shù),如果沒有指定該值,但是指定了 ??delay?
? 的值,則表示無限次
結(jié)果字段說明
在命令行輸入 vmstat 并回車, 會輸出一次結(jié)果
[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 ~]#
結(jié)果中有許多的字段,下表列出了每個字段的詳細說明
字段 | 說明 |
r | 可運行進程的數(shù)量,包括運行態(tài)和就緒態(tài) |
b | 處于不可中斷睡眠狀態(tài)的進程數(shù)量 |
swpd | 虛擬內(nèi)存使用量 |
free | 空閑內(nèi)存 |
buff | 用作buffer的內(nèi)存數(shù)量 |
cache | 用作cache的內(nèi)存數(shù)量 |
si | 從磁盤換入內(nèi)存的數(shù)量 |
so | 從內(nèi)存換出到磁盤的數(shù)量 |
bi | 從塊設(shè)備接收的塊,單位:塊/秒 |
bo | 發(fā)送到塊設(shè)備的塊,單位:塊/秒 |
in | 每秒中斷數(shù),包括時鐘中斷 |
cs | 每秒上下文切換數(shù) |
us | 用戶態(tài)執(zhí)行時間 |
sy | 內(nèi)核態(tài)執(zhí)行時間 |
id | CPU空閑時間 |
wa | 等待IO的時間 |
st | 從虛擬機中偷取的時間 |
表中第二行 ??處于不可中斷睡眠狀態(tài)的進程數(shù)量?
?,這里的不可中斷是指 一個進程在執(zhí)行某些系統(tǒng)調(diào)用時進入的狀態(tài),在這種狀態(tài)下,進程被阻塞,并且不能被中斷,直到完成系統(tǒng)調(diào)用
字段結(jié)果按照顏色分成了幾部分,從上到下依次是:進程信息,內(nèi)存信息,IO信息,系統(tǒng)中斷和上下文,CPU時間
內(nèi)存信息中數(shù)值的單位默認是 KB ( 1024 kbytes ), CPU時間字段并不表示具體的時間,而是占總CPU時間的一個百分比
常見選項
選項 | 說明 |
-a | 顯示活躍和非活躍內(nèi)存 |
-f | 從系統(tǒng)啟動至今 fork 的數(shù)量,包括 fork、vfork 以及 clone 等系統(tǒng)調(diào)用 |
-s | 顯示系統(tǒng)事件計數(shù)以及內(nèi)存統(tǒng)計信息 |
-d | 報告磁盤統(tǒng)計信息 |
-D | 統(tǒng)計活動磁盤信息 |
-p | 指定分區(qū)的詳細信息 |
-t | 追加一列時間顯示 |
-S | 按照指定字節(jié)單位顯示 |
-w | 結(jié)果按照寬模式顯示 |
-V | vmstat的版本 |
常見用法
vmstat 命令主要用于識別系統(tǒng)的瓶頸,統(tǒng)計數(shù)據(jù)的時候,它不會包含自身進程
- 按照指定時間間隔和次數(shù)輸出
[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 0
??2?
? 表示每隔 2 秒輸出一次結(jié)果,??10?
? 表示總共輸出 10 次,10 次之后程序自動結(jié)束
- 修改內(nèi)?存顯示單位
輸出的結(jié)果中,內(nèi)存數(shù)據(jù)的單位默認是 KB,可以通過 ??-S?
? 選項調(diào)整顯示的單位,有下面幾種單位可供選擇
注意:??-S?
?? 選項對 ??si、 so?
? 字段無效
k # 1000 bytes
K # 1024 bytes
m # 1000 * 1000 bytes
M # 1024 * 1024 bytes
上圖中第一個結(jié)果中內(nèi)存數(shù)據(jù)顯示單位是 KB , 第二個結(jié)果中單位是 MB,將第一個結(jié)果對應(yīng)字段的數(shù)值除以 1024 就得到了第二個結(jié)果
- 活躍內(nèi)存和非活躍內(nèi)存
??inact?
? 是非活躍內(nèi)存,??active?
? 是活躍內(nèi)存
活躍內(nèi)存是進程在使用的內(nèi)存,非活躍內(nèi)存是未運行進程的內(nèi)存
- 系統(tǒng)啟動以來 fork 的數(shù)量
這里的 fork 數(shù)量包括 fork、vfork 以及 clone 等系統(tǒng)調(diào)用
[root@cghost22 ~]# vmstat -f
12714 forks
[root@cghost22 ~]# vmstat -f
12715 forks
[root@cghost22 ~]# vmstat -f
12716 forks
我們每次在控制臺執(zhí)行一次命令,系統(tǒng)就會 fork 一個新的進程來執(zhí)行命令,比如像上面的例子,每執(zhí)行一次 ??vmstat -f?
? 命令,系統(tǒng)就會 fork 一個新進程
這個選項還可以用于統(tǒng)計某個操作消耗多少次 fork 調(diào)用,只需要在操作前后各執(zhí)行一次 ??vmstat -f?
? 命令,比較兩次結(jié)果的差值即可
- 每行追加一列時間
追加一列時間顯示,有助于比較一段時間內(nèi)的結(jié)果
- 按照寬模式顯示
vmstat 結(jié)果中的某些字段的數(shù)字有時會比較長,而且跟字段名的位置有偏差, 不太適合人類的觀看習(xí)慣,??-w?
? 選項可以按照寬模式顯示數(shù)據(jù),使結(jié)果看起來更直觀,下圖是分別未使用寬模式和使用了寬模式的一個對比
- 統(tǒng)計磁盤信息
磁盤信息主要分三個方面:讀、寫、IO ,讀和寫以毫秒為單位,IO以秒為單位
讀
total: 成功讀取的總數(shù)
merged: 分組讀取(產(chǎn)生一個 IO)
sectors: 成功讀取的扇區(qū)數(shù)
ms: 讀取花費的毫秒
寫
total: 成功寫入的總數(shù)
merged: 分組寫入(產(chǎn)生一個 IO)
sectors: 成功寫入的扇區(qū)數(shù)
ms: 寫花費的毫秒
IO
cur: 正在進行的IO
s: IO花費的秒數(shù)
- 指定磁盤分區(qū)信息
上圖中,輸出結(jié)果顯示 sda3 分區(qū)設(shè)備的信息,它們包括:讀計數(shù)、讀取的扇區(qū)數(shù),寫計數(shù),分區(qū)寫請求總數(shù)。