vmstat を実行すると、
- CPU使用率は低い
- idle が高い
- それなのに処理が遅い
という状況に遭遇することがあります。
本記事では、 「CPUが暇=問題なし」と誤解しないための vmstat の読み方 を、トラブルシューティング視点で解説します。
目次
結論:vmstatは「CPUの暇な理由」を見るコマンド
vmstat は単なるCPU使用率確認コマンドではありません。
CPU・メモリ・I/Oの関係性を同時に見ることで、
- CPUがなぜ動いていないのか
- どこで処理が詰まっているのか
を読み取るためのツールです。
vmstat の基本的な使い方
vmstat 1
1秒間隔で状態変化を見るのが基本です。
最重要:r と b の意味
r(Run queue)
CPUを使いたくて待っているプロセス数です。
- r が CPUコア数以下 → CPUは余裕あり
- r が CPUコア数を超える → CPU不足
b(Blocked)
I/O待ちなどで止まっているプロセス数です。
b が増えているのに r が少ない場合、 CPUは暇でも処理は進みません。
CPU idle が高くなる典型パターン
パターン①:b が多い(I/O待ち)
- b が増加
- wa が高い
- id が高い
CPUはディスクやネットワークI/O待ちで仕事ができません。
パターン②:si / so が発生している(スワップ)
確認項目
- si(swap in)
- so(swap out)
これらが継続的に増えている場合、
- メモリ不足
- ディスクI/O待ち
によりCPUが idle 状態になります。
パターン③:r が少なく、全体的に動きがない
これはアプリケーションが待ち状態です。
- 外部API待ち
- DBロック待ち
- 接続待ち
OS視点では問題が見えにくいケースです。
CPU欄(us / sy / id / wa)の正しい読み方
- us:ユーザープロセス
- sy:カーネル処理
- id:CPUが何もできていない時間
- wa:I/O待ち
id が高い=健全ではありません。
wa とセットで見るのが重要です。
vmstatで分かる「CPUが暇な理由」まとめ
| 症状 | vmstatの特徴 | 原因 |
|---|---|---|
| CPU idle 高 | b 多 / wa 高 | I/Oボトルネック |
| CPU idle 高 | si / so 発生 | メモリ不足 |
| CPU idle 高 | r 少 / b 少 | アプリ待ち |
よくある誤解
- idleが高いからCPUは問題ない
- rが少ない=正常
- vmstatは補助的コマンド
vmstatは 一次切り分けの主役になれるコマンドです。
vmstat → 次に打つべきコマンド
- I/O疑い:iostat -x 1
- プロセス特定:iotop
- CPU詳細:top / htop
まとめ
vmstat は 「CPUがなぜ暇なのか」を説明してくれる 非常に優秀なツールです。
数字だけで判断せず、 r / b / wa / si / so をセットで読む ことで、原因に最短で辿り着けます。
あわせて読みたい


CPU idleが高いのに遅い原因
サーバーが遅いと感じて確認すると、 CPU idle が高い CPU使用率も低い それでもレスポンスが悪い この状態は、 Linux運用で最も混乱しやすいパターンの一つです。 本記…
あわせて読みたい


ionice / nice の正しい使い分け
Linuxサーバーで負荷対策を行う際、 nice を設定したのに効果がない ionice っていつ使うの? 結局どっちを使えばいいのか分からない という悩みを持つ運用担当者は非常…
あわせて読みたい


niceを設定しても効果が出ない理由
Linuxサーバーで負荷対策を行う際、 nice を下げたのにレスポンスが改善しない CPU使用率は下がったが体感は変わらない 「niceって意味あるの?」と感じた このような経…
