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 | 內核態執行時間 |
id | CPU空閒時間 |
wa | 等待IO的時間 |
st | 從虛擬機器偷取的時間 |
表中第二行處於不可中斷睡眠狀態的行程數量
,這裡的不可中斷是指一個行程在執行某些系統呼叫時進入的狀態,在這個狀態下,程序被阻塞,並且不能被中斷,直到完成系統呼叫
字段結果按照顏色分成了幾部分,從上到下依次是:進程信息,內存信息,IO信息,系統中斷和上下文,CPU時間
記憶體資訊中數值的單位預設是 KB ( 1024 kbytes ), CPU時間欄位並不表示特定的時間,而是佔總CPU時間的一個百分比
選項 | #說明 |
---|---|
-a | 顯示活躍和非活躍記憶體 |
-f | 從系統啟動至今 fork 的數量,包括 fork、vfork 以及 clone 等系統呼叫 |
-s | 顯示系統事件計數以及記憶體統計資料 |
-d | 報告磁碟統計資料 |
-D | 統計活動磁碟資訊 |
-p | 指定分割區的詳細資訊 |
-t | 追加一列時間顯示 |
-S | 依照指定位元組單位顯示 |
-w | 結果依照寬模式顯示 |
-V | vmstat的版本 |
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 0
2
表示每隔 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 分区设备的信息,它们包括:读计数、读取的扇区数,写计数,分区写请求总数
以上是Linux 下如何使用 vmstat 指令的詳細內容。更多資訊請關注PHP中文網其他相關文章!