コマンド構文と頻出オプション
vmstat [オプション] [インターバル秒] [回数]
# 3 秒ごとに 10 回出力
vmstat 3 10
代表的なオプション
-a : 非アクティブ/アクティブメモリ量を表示(buff/cache の代わり)
-s : イベント別のメモリ統計サマリー
-d : 各デバイスの I/O 統計
-p <デバイス> : 指定デバイスの詳細 I/O
デフォルト出力フィールドの意味
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free inact active si so bi bo in cs us sy id wa st
1 0 0 987654 43210 56789 0 0 0 0 123 234 2 1 97 0 0
| セクション | 項目 | 解説 |
| procs | r | 実行待ちのプロセス数。CPU コア数を超えると CPU 不足。 |
| b | I/O 待ちでスリープ中のプロセス数。高値はディスク負荷。 |
| memory | swpd | スワップ使用中容量 (KB)。増加傾向はメモリ逼迫。 |
| free | 未使用物理メモリ (KB)。 |
| inact | 非アクティブリストのページ数 (-a オプション時)。 |
| active | アクティブリストのページ数 (-a オプション時)。 |
| swap | si | スワップからの読み込み量 (KB/s)。 |
| so | スワップへの書き込み量 (KB/s)。 |
| io | bi | ブロックデバイスからの読み込み (KB/s)。 |
| bo | ブロックデバイスへの書き込み (KB/s)。 |
| system | in | 1 秒あたりの割り込み数。 |
| cs | 1 秒あたりのコンテキストスイッチ数。過剰は CPU ロス。 |
| cpu | us | ユーザ空間での CPU 使用率 (%)。 |
| sy | カーネル空間での CPU 使用率 (%)。 |
| id | アイドル率 (%)。 |
| wa | I/O 待ち率 (%)。高値はディスクボトルネック。 |
| st | 仮想化環境での「盗まれた」CPU 時間 (%)。 |
ボトルネック判定の実践チェックリスト
- メモリ不足:free が極端に少なく、si/so がゼロでない
- CPU 飽和:r が論理 CPU 数を超え、id が 5 % 以下
- I/O 遅延:b と wa が 10 以上、bi/bo が急増
- スケジューラ負荷:cs が 1 万/秒を超える
応用テクニック
デバイス別 I/O 詳細の確認
$ vmstat -d
disk- ------------reads------------ ------------writes----------- -----IO------
total merged sectors ms total merged sectors ms cur sec
sda 12345 1234 987654 12345 54321 4321 1234567 23456 2 345
nvme0n1 5678 890 456789 6789 12345 1234 654321 9876 0 123
merged:I/O スケジューラが結合したリクエスト数
cur:現在ディスクキューにあるリクエスト数
メモリ統計サマリー
$ vmstat -s
16384256 K total memory
1234567 K used memory
987654 K active memory
432109 K inactive memory
8765432 K free memory
123456 K buffer memory
654321 K swap cache
2097148 K total swap
0 K used swap
2097148 K free swap
他ツールとの使い分け
| ツール | 強み | 補足 |
| top / htop | プロセス単位のリアルタイム情報 | 画面更新が重い |
| sar | 過去ログの時系列解析 | sysstat パッケージ必要 |
| iostat -x | ディレイテンシやサービスタイム | デバイス性能の深掘りに |
| vmstat | 軽量・スクリプト連携しやすい | 瞬時のシステム全体像把握 |
vmstat の値はあくまで瞬間値であるため、連続観測や他ツールとの相関を見ることでより正確なボトルネック特定が可能になる。