vmstat/iostat/sar - 性能解析ツール 3 兄弟
この記事で分かること
vmstat/iostat/sarそれぞれの役割と読み方- CPU・メモリ・I/O ボトルネックの切り分け手順
- 3 つのツールの実務での使い分け判断基準
結論:3 ツールの役割分担
| ツール | 得意なこと |
|---|---|
vmstat |
CPU/メモリ/スワップ/I/O を一画面で俯瞰。まず全体把握 |
iostat |
デバイス単位の I/O 詳細(await・IOPS・util%)を確認 |
sar |
過去の履歴データを時系列で参照。事後調査に不可欠 |
前提環境
- OS:Ubuntu / RHEL 系 Linux
iostat/sarはsysstatパッケージが必要sudo apt install sysstatでインストール
vmstat とは何か?
CPU・メモリ・スワップ・I/O・プロセス状態を 1 行にまとめて表示する。ボトルネックが「CPU か I/O かメモリか」を最初に絞り込む一手目として使う。
基本的な使い方
vmstat [interval [count]]
$ vmstat 1 5
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 0 1543200 52480 921600 0 0 14 38 312 580 12 3 84 1 0 0 0 0 1540800 52480 922100 0 0 0 12 280 510 5 1 93 1 0 0 0 0 1539900 52480 922500 0 0 0 16 295 530 4 1 94 1 0
各フィールドの読み方
procs(プロセス数)
r:実行待ちプロセス数。論理 CPU 数を継続的に超えると CPU ボトルネックb:I/O 待ちでブロックされているプロセス数
memory(KB 単位)
swpd:使用中スワップ量。0 以外になったら注意free:未使用メモリbuff/cache:バッファ・ページキャッシュ(OS が管理する再利用可能な領域)
swap(スワップ活動)
si:スワップイン(ディスク → メモリ)。継続的に非 0 → メモリ不足so:スワップアウト(メモリ → ディスク)。継続的に非 0 → メモリ不足
io(ブロック I/O、ブロック/秒)
bi:ブロックデバイスからの読み込みbo:ブロックデバイスへの書き込み
cpu(CPU 使用率 %)
us:ユーザー空間の処理sy:カーネル空間の処理id:アイドルwa:I/O 待機。10% を超え続けると I/O ボトルネックの疑いst:仮想化環境で他 VM に奪われた時間(steal)
最初の行は累積値
vmstat 起動時の第 1 行はシステム起動後の累積平均値(参考程度)。実際の診断は 2 行目以降で判断する。定番は vmstat 1(1 秒間隔で継続)または vmstat 5 12(5 秒間隔 × 12 回で 1 分間の定点観測)。
iostat とは何か?
CPU 概要とデバイス単位の I/O 統計を表示する。vmstat で I/O ボトルネックの疑いが生じた後、「どのデバイスが問題か」を特定する二手目として使う。
インストール(初回のみ)
$ sudo apt install sysstat # Ubuntu/Debian $ sudo dnf install sysstat # RHEL/Fedora
基本的な使い方
$ iostat -x 1 5
Device r/s w/s rkB/s wkB/s await r_await w_await util% sda 1.20 5.30 48.00 212.00 2.50 1.80 2.70 3.20 nvme0n1 25.00 80.00 800.00 3200.00 0.48 0.40 0.52 8.50
重要フィールドの読み方
| フィールド | 説明 | 目安 |
|---|---|---|
await |
リクエストの平均応答時間(ms) | HDD: 20ms 超で注意 / SSD: 1ms 超で注意 |
r_await |
読み込み平均応答時間(ms) | — |
w_await |
書き込み平均応答時間(ms) | — |
util% |
デバイスのビジー率 | 80% 超で飽和懸念、100% で飽和確定 |
r/s, w/s |
毎秒の読み書き回数(IOPS) | デバイス仕様の IOPS 上限と比較 |
util% が 100% に近づくとデバイスが飽和(I/O キューが詰まり応答遅延が増大)。await の急増と合わせて確認する。なお util% はパーティション単位ではなくデバイス単位の指標。
特定デバイスのみ絞り込む
$ iostat -x -d sda nvme0n1 1
sar とは何か?
CPU・メモリ・I/O・ネットワークのメトリクスを継続収集し、履歴として参照できる。「昨夜の深夜に何が起きたか」「先週と比べて負荷が増えているか」を調べるときに使う。
有効化手順
$ sudo apt install sysstat $ sudo systemctl enable sysstat --now
有効化後、sadc デーモンが /var/log/sa/saDD(DD は日付)にデータを蓄積する。
主要オプション
$ sar -u 1 5 # CPU 使用率(1秒間隔×5回) $ sar -r 1 5 # メモリ使用量 $ sar -b 1 5 # I/O 統計 $ sar -n DEV 1 5 # ネットワーク統計(デバイス別) $ sar -n EDEV 1 5 # ネットワークエラー統計 $ sar -q 1 5 # ロードアベレージ・プロセス数
過去データを参照する
# 今日の CPU 統計(すべての時刻) $ sar -u # 1 日分の全統計(-A で全メトリクス) $ sar -A -f /var/log/sa/sa01
00:00:01 all 2.34 0.00 5.67 0.12 0.00 91.87 01:00:01 all 1.23 0.00 3.45 0.08 0.00 95.24 02:00:01 all 0.98 0.00 2.11 0.05 0.00 96.86
収集間隔の変更
デフォルトは 10 分間隔(/etc/cron.d/sysstat または /etc/sysstat/sysstat で設定)。本番環境での障害調査精度を上げるには 1〜2 分間隔を推奨。間隔を短くするほどディスク使用量は増える点に注意。
3 つのツールをどう使い分けるか?
調査目的に応じてツールを選ぶことで、診断時間を大幅に短縮できる。
| 調査したいこと | 使うツール | 確認するフィールド |
|---|---|---|
| まず全体像を把握したい | vmstat 1 |
r, wa, si/so |
| CPU ボトルネックを確認 | vmstat / sar -u |
r, us+sy, id |
| I/O が遅いデバイスを特定 | iostat -x 1 |
await, util% |
| スワップ活動を確認 | vmstat |
si, so, swpd |
| 昨夜の障害を事後調査 | sar -u / -r / -b |
時刻別の推移 |
| ネットワーク帯域を確認 | sar -n DEV |
rxkB/s, txkB/s |
ボトルネック特定の実践パターン
現場でよく使う 4 つの診断シーケンスを示す。
1. CPU ボトルネック疑いの場合
# Step 1: 全体を確認 $ vmstat 1 10 # r(実行待ちプロセス数)が CPU 数を超え続けるか確認 # Step 2: sar で詳細と推移を確認 $ sar -u 1 10 # us + sy が継続して 90% 超 → CPU ボトルネック確定
2. メモリ・スワップ問題疑いの場合
# Step 1: スワップ活動の確認 $ vmstat 1 10 # si/so が継続的に非 0 → スワップ中(メモリ不足) # Step 2: メモリ詳細 $ sar -r 1 5 # %memused が高い + kbswpused が増加中 → 要対処
3. I/O ボトルネック疑いの場合
# Step 1: vmstat で wa を確認 $ vmstat 1 5 # wa が 10% 超 → I/O ボトルネック疑い # Step 2: iostat で問題デバイスを特定 $ iostat -x 1 10 # await が高いか util% が 80% 超のデバイスに注目 # HDD なら await 20ms 超、SSD なら await 1ms 超が警戒ライン
4. ネットワーク問題疑いの場合
$ sar -n DEV 1 5 # rxkB/s / txkB/s で帯域使用量を確認 # rxerr/s / txerr/s が非 0 ならハード・ドライバ問題の可能性