言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Linux & Mac & Bashコマンド辞典

  1. トップページ
  2. Linux & Mac & Bashコマンド辞典
  3. vmstat / iostat(パフォーマンス統計)

vmstat / iostat(パフォーマンス統計)

『vmstat』はメモリ・スワップ・CPU・I/O の統計をリアルタイムに出力するコマンドで、『iostat』はディスクデバイスごとのI/Oスループットや待ち時間を表示するコマンドです。どちらも軽量で、スクリプトや監視ツールと組み合わせてパフォーマンスのボトルネックを素早く特定するのに役立ちます。高負荷なサーバーで「レスポンスが遅い」と感じたとき、まず vmstat でスワップ発生の有無とI/O待ちを確認し、次に iostat で原因ディスクを特定するという手順が定石です。

構文

# -----------------------------------------------
#  vmstat の構文
# -----------------------------------------------

# vmstat [オプション] [間隔(秒)] [回数]
#   → 間隔・回数を指定しない場合は現時点の統計を1行出力します
#   → 間隔のみ指定した場合は Ctrl+C で停止するまで繰り返します
#   例: vmstat 1 5  (1秒ごとに5回出力)

# 主要オプション
#   -a   → buff/cache の代わりに active/inactive メモリを表示します
#   -d   → ディスク統計を表示します(iostat に近い情報)
#   -s   → メモリ統計のサマリーを表示します
#   -S M → 数値の単位をメガバイト(MB)に変更します
#   -w   → 列幅を広げて数値が切れないようにします
#   -t   → タイムスタンプ列を追加します

# -----------------------------------------------
#  iostat の構文
# -----------------------------------------------

# iostat [オプション] [間隔(秒)] [回数]
#   → sysstat パッケージに含まれます(未導入の場合は apt/dnf でインストール)
#   例: iostat -xh 1 3  (拡張情報をわかりやすい単位で1秒ごとに3回出力)

# 主要オプション
#   -x   → 拡張統計(await / %util など)を表示します
#   -h   → 数値を人間が読みやすい単位(K/M/G)で表示します
#   -d   → ディスク統計のみ表示します(CPU統計を除外)
#   -p {デバイス}
#        → 指定したデバイスとそのパーティションのみ表示します
#        例: iostat -xh -p sda 1

構文一覧

コマンド / 列説明
vmstat 1 51秒ごとに5回、メモリ・スワップ・CPU・I/O の統計を出力します。先頭行は起動からの累計値なので参考程度に見てください。
vmstat -S M 1単位を MB にして1秒ごとに出力します。メモリ量が大きいサーバーで数値が読みやすくなります。
vmstat -abuff/cache の代わりに active / inactive メモリを表示します。メモリ回収可否の判断に使います。
vmstat -sメモリ統計のサマリーを縦方向に表示します。スワップ総容量・使用量を一覧で確認できます。
vmstat: r実行待ちプロセス数(Run queue)。CPU コア数を超え続ける場合は CPU 不足のサインです。
vmstat: bI/O 待ちでスリープ中のプロセス数(Blocked)。0 より大きい状態が続く場合はディスクがボトルネックです。
vmstat: swpdスワップ使用量(KB)。0 より大きい場合は物理メモリが不足しています。
vmstat: free未使用の物理メモリ(KB)。Linux は空きメモリをキャッシュに充てるため、小さくても必ずしも問題ではありません。
vmstat: buffバッファキャッシュ(KB)。ブロックデバイスのメタデータなどを保持します。
vmstat: cacheページキャッシュ(KB)。ファイルの読み書きを高速化します。メモリ不足時にカーネルが解放します。
vmstat: siスワップイン(KB/s)。ディスクからメモリへ読み戻している量です。値が大きいと深刻なメモリ不足です。
vmstat: soスワップアウト(KB/s)。メモリからディスクへ退避している量です。継続して発生している場合はメモリ増設を検討してください。
vmstat: biブロックデバイスからの読み込み(ブロック/s)。ディスク読み取りの負荷を表します。
vmstat: boブロックデバイスへの書き込み(ブロック/s)。ディスク書き込みの負荷を表します。
vmstat: in割り込み回数/s(Interrupts)。NIC や HBA の割り込みが多い場合に増加します。
vmstat: csコンテキストスイッチ回数/s。高すぎる場合はプロセス数や I/O 待ちが多すぎる可能性があります。
vmstat: usユーザー空間での CPU 使用率(%)。アプリケーション処理が占める割合です。
vmstat: syカーネル空間での CPU 使用率(%)。高い場合はシステムコールや割り込み処理が多すぎる可能性があります。
vmstat: idCPU アイドル率(%)。100 に近いほど CPU に余裕があります。
vmstat: waI/O 待ち時間の CPU 割合(%)。10〜20% を超え続ける場合はディスクがボトルネックです。
iostat -xh 1 3拡張統計を人間が読みやすい単位で1秒ごとに3回出力します。デバイスごとの負荷を詳細に確認できます。
iostat: tpsデバイスへの転送回数/s(Transfers Per Second)。IOPS に相当します。
iostat: kB_read/s読み取りスループット(KB/s)。
iostat: kB_wrtn/s書き込みスループット(KB/s)。
iostat: awaitI/O リクエストの平均待ち時間(ミリ秒)。SSD で数ミリ秒、HDD で10〜20ms 程度が正常の目安です。
iostat: %utilデバイスの使用率(%)。70% を超えると飽和の兆候です。100% に達するとI/Oが完全にボトルネックになっています。

使用例

vmstat の出力例
$ 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  1 512000  48320  12800 380000  120  240  3200  1800 1450 2800 35 15 40 10  0
 3  2 518000  44100  12800 376000  180  320  4800  2200 1820 3400 42 18 28 12  0
 4  3 524000  40200  12800 372000  240  400  6400  2600 2100 4000 48 20 18 14  0
 3  2 528000  38400  12800 370000  200  360  5600  2400 1950 3700 44 19 24 13  0
 2  1 530000  37600  12800 368000  160  280  4200  2000 1700 3200 38 16 34 12  0
# ↑ swpd が増加し続け(メモリ不足)、si/so が 0 より大きい(スワップ発生中)
# ↑ b 列が 1〜3(I/O 待ちプロセスが存在)、wa が 10〜14%(ディスクI/O待ちが発生)
# ↑ このような状況では iostat でどのディスクが原因か確認します
iostat の出力例
$ iostat -xh 1 3
Linux 5.14.0 (jujutsu-srv)   2026-03-25   _x86_64_   (4 CPU)

          rrqm/s  wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util Device
            0.00    8.50   45.20   32.80     6.2M     4.1M   210.0k     2.40   24.5    18.2    33.8    5.2  40.3% sda
            0.00    0.20  128.40   95.60    18.4M    12.8M   245.0k     7.80   38.2    22.4    58.6    5.8  82.6% sdb
            0.00    0.10    2.30    1.80   256.0k   128.0k    72.0k     0.02    5.1     4.8     5.6    4.9   2.0% sdc

          rrqm/s  wrqm/s     r/s     w/s    rMB/s    wMB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util Device
            0.00    9.10   48.30   35.20     6.6M     4.4M   215.0k     2.60   25.1    19.0    34.5    5.3  41.8% sda
            0.00    0.30  142.80  108.20    20.1M    14.5M   252.0k     9.20   46.3    27.1    69.8    5.9  93.2% sdb
            0.00    0.10    2.10    1.60   240.0k   112.0k    69.0k     0.02    4.9     4.7     5.3    4.8   1.8% sdc

# ↑ sdb の %util が 82〜93%(ほぼ飽和状態)
# ↑ sdb の await が 38〜46ms(書き込み待ち w_await が特に高い)
# ↑ sdb がボトルネック。書き込み量(wMB/s)も大きく、HDD の限界に達している可能性があります

概要

『vmstat』と『iostat』は Linux のパフォーマンス診断でよく使われる基本ツールです。トラブル発生時の手順としては、まず top / htop でどのプロセスが CPU やメモリを消費しているかを確認し、次に vmstat で「スワップが発生しているか」「I/O 待ちで CPU が止まっているか」を確認します。vmstatwa(I/O wait)列が高い場合や b 列(I/O 待ちプロセス)が増加している場合は、iostat -xh でデバイスごとの %utilawait を確認してどのディスクが詰まっているかを特定します。%util が 70% を超えていれば要注意、100% に達している場合はそのデバイスが完全に飽和しており、I/O のボトルネックとなっています。swpd が増加し続け si/so(スワップイン・アウト)が継続して発生する場合は物理メモリ不足が原因です。この場合は不要なプロセスの停止やメモリの増設を検討してください。定期的な記録をとって傾向を把握したい場合は sar / sysstat を合わせて活用することをおすすめします。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。