vmstat(Virtual Memory Statistics)是系統管理員掌握記憶體、CPU、I/O 壓力的核心工具。本文從虛擬記憶體原理切入,詳細解讀各欄位含義與異常判讀。
vmstat [delay [count]] # 基本:每 delay 秒輸出一行,共 count 次
vmstat -a # 顯示 active/inactive 記憶體
vmstat -s # 顯示記憶體/CPU/分頁等統計摘要
vmstat -d # 磁碟統計(讀寫次數、扇區、延遲)
vmstat -p /dev/sda1 # 指定分區統計
vmstat -S m # 以 MB 為單位顯示
vmstat -f # 開機至今 fork 總數
| 欄位 | 含義 | 異常判讀 |
|---|---|---|
| r | 執行佇列進程數(含正在跑) | 持續 > CPU 核心數 → CPU 瓶頸 |
| b | 等待 I/O 進程數(不可中斷睡眠) | 持續 > 0 → 磁碟/網路 I/O 瓶頸 |
| swpd | 已使用虛擬記憶體 (KB) | 持續增長 → 實體記憶體不足 |
| free | 空閒記憶體 (KB) | 長期極低 → 記憶體壓力 |
| buff | Buffer Cache (區塊裝置緩衝) | — |
| cache | Page Cache (檔案內容緩存) | — |
| si | 每秒從交換區讀入 (KB/s) | 持續 > 0 → Swap In 頻繁,效能差 |
| so | 每秒寫入交換區 (KB/s) | 持續 > 0 → Swap Out 頻繁,記憶體不足 |
| bi | 每秒從區塊裝置讀入區塊數 | — |
| bo | 每秒寫入區塊裝置區塊數 | — |
| in | 每秒中斷數 | 極高 → 硬體/驅動問題 |
| cs | 每秒上下文切換數 | 極高 → 進程/執行緒過多搶佔 |
| us | 用戶態 CPU % | — |
| sy | 核心態 CPU % | 持續高 → 系統呼叫過多 |
| id | 閒置 CPU % | — |
| wa | 等待 I/O CPU % | 持續 > 20% → 存儲瓶頸 |
| st | 虛擬機被 Hypervisor 偷走 CPU % | — |
vmstat 2 5
觀察 si/so、wa、r/b 趨勢,判斷是否需加記憶體、優化 SQL、升級存儲。