vmstatの正しい読み方(CPUが暇な理由)

  • URLをコピーしました!

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 をセットで読む ことで、原因に最短で辿り着けます。

目次