こうした状況は、Webアプリケーションやデータベースを運用する現場でよく直面します。topコマンドやvmstatではI/Oの詳細が見えないため、ストレージの問題を切り分けるのが難しいのです。
この記事では、iostatコマンドの実践的な使い方を解説します。
sysstatパッケージのインストールから、CPU統計・デバイス別I/O統計の読み方、継続監視、高I/O負荷の原因特定まで網羅します。
実行環境:RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済み
この記事のポイント
・iostat -x でデバイス別のI/O詳細統計(%util・await)を確認できる
・iostatは sysstatパッケージのインストールが必要
・%utilが80%超で該当デバイスがI/Oボトルネックのサイン
・継続監視は iostat -x 1 10 で1秒間隔10回実行する
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
iostatコマンドとは?ディスクI/Oを統計で確認するツール
iostat(Input/Output Statistics)は、CPUの使用率とブロックデバイス(ディスク)のI/O統計を表示するコマンドです。
sysstatパッケージに含まれており、topコマンドやvmstatコマンドでは把握しにくいディスクI/Oの詳細を確認できます。
iostatが特に有効なのは以下のようなシーンです。
・サーバーが重い原因の切り分け:CPUなのかディスクなのかを数値で判断できる
・ディスクの書き込み・読み込み量の把握:バックアップやDBの書き込み頻度を確認できる
・I/Oボトルネックの特定:%utilが高いデバイスをピンポイントで特定できる
基本構文は次のとおりです。
iostat [オプション] [間隔(秒)] [回数]
インストール方法(sysstatパッケージ)
iostatはsysstatパッケージに含まれているため、OSによってはインストールが必要です。
1. RHEL系(RHEL / Rocky Linux / AlmaLinux)にインストールする
# sysstatパッケージをインストールする # dnf install sysstat -y # バージョンを確認する # iostat -V sysstat version 12.5.4 (C) Sebastien Godard (sysstat
orange.fr)
2. Ubuntu / Debianにインストールする
$ sudo apt install sysstat -y
3. サービスを有効化する(データ収集用)
iostatの単発実行だけなら不要ですが、sarコマンドと組み合わせて過去のI/Oデータを蓄積する場合はsysstatサービスを有効化します。
# systemctlでsysstatを有効化する # systemctl enable --now sysstat Created symlink /etc/systemd/system/multi-user.target.wants/sysstat.service
基本的な使い方
4. iostatをオプションなしで実行する
オプションなしで実行すると、起動からの累積統計が表示されます。通常の監視には参考値としての意味が薄いため、継続実行と組み合わせて使います。
# iostat Linux 5.14.0-427.13.1.el9_4.x86_64 (web01.example.com) 2026-04-10 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.34 0.00 0.89 0.45 0.00 96.32 Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 5.21 12.30 128.45 254892 2661840 sdb 0.03 0.01 0.00 198 42
・%iowait:CPUがI/O完了を待っていた割合(これが高いとI/Oがボトルネック)
・tps:デバイスへの1秒あたりのトランザクション数(読み書きの頻度)
・kB_read/s:1秒あたりの読み込み量(KB)
・kB_wrtn/s:1秒あたりの書き込み量(KB)
5. -x オプションで拡張統計を確認する(最重要)
実務では必ず
-x オプションを付けて実行します。デバイスごとの詳細I/O統計が確認できます。# iostat -x Linux 5.14.0-427.13.1.el9_4.x86_64 (web01.example.com) 2026-04-10 _x86_64_ (4 CPU) avg-cpu: %user %nice %system %iowait %steal %idle 2.34 0.00 0.89 0.45 0.00 96.32 Device r/s w/s rkB/s wkB/s rrqm/s wrqm/s r_await w_await aqu-sz %util sda 1.20 4.01 12.30 128.45 0.00 1.23 1.52 5.34 0.02 0.47 sdb 0.03 0.00 0.01 0.00 0.00 0.00 2.11 0.00 0.00 0.00
・r/s・w/s:1秒あたりの読み込み・書き込みリクエスト数
・rkB/s・wkB/s:1秒あたりの読み込み・書き込みデータ量(KB)
・r_await・w_await:リクエストの平均待ち時間(ミリ秒)。20ms超が警戒ライン
・%util:デバイスがビジー状態だった割合。80%超でボトルネックを疑う、100%に近いと飽和状態
6. 継続して監視する(間隔と回数を指定)
障害調査では「今この瞬間の状態」を継続してみることが大切です。間隔(秒)と回数を指定して繰り返し実行します。
# 1秒間隔で10回表示する(ディスクI/Oのリアルタイム監視) # iostat -x 1 10 # 2秒間隔で継続表示(Ctrl+Cで停止) # iostat -x 2
7. -d オプションでデバイス統計のみ表示する
CPUの統計が不要な場合は
-d オプションでデバイス情報だけを表示できます。# デバイス統計のみ表示する # iostat -dx 1 5 Linux 5.14.0-427.13.1.el9_4.x86_64 (web01.example.com) 2026-04-10 _x86_64_ (4 CPU) Device r/s w/s rkB/s wkB/s r_await w_await %util sda 1.20 4.01 12.30 128.45 1.52 5.34 0.47
応用・実務Tips
8. 高I/O負荷の時間帯を特定する(sarとの組み合わせ)
iostatはリアルタイム監視が中心ですが、過去のI/Oデータを確認したい場合はsarコマンドを使います。
# sarでディスクI/Oの履歴を確認する # sar -d -p 1 5 # 昨日のディスクI/Oを確認する # sar -d -p -f /var/log/sa/sa09
iotop(別途インストール)や以下のコマンドで特定できます。# I/Oを多く消費しているプロセスを確認する(iotopが使えない場合) # ps aux --sort=-%cpu | head -10
9. cronで定期的にI/O統計を記録する
高負荷が夜間に発生する場合、cronで定期ログを取ると原因特定が容易になります。
# /etc/cron.d/iostat-monitor に以下を記述する例 # 毎時0分にI/O統計をログに追記する 0 * * * * root iostat -dx 1 3 >> /var/log/iostat.log 2>/dev/null
10. MB/s単位で表示する(-m オプション)
大容量ストレージでは、KB単位より MB単位の方が読みやすい場合があります。
# MB/s単位でI/O統計を表示する # iostat -xm 1 5 Device r/s w/s rMB/s wMB/s r_await w_await %util sda 1.20 4.01 0.01 0.13 1.52 5.34 0.47
トラブルシュート:「iostat: command not found」が出た時の対処法
「iostat: command not found」が表示された場合
iostatはsysstatパッケージに含まれているため、パッケージが未インストールの場合に発生します。
# RHEL系の場合 # dnf install sysstat -y # Ubuntu/Debianの場合 $ sudo apt install sysstat -y
「%util」が常に100%に近い場合
ストレージがI/O飽和状態です。以下を確認してください。
・大量書き込みプロセスを特定する:
ps aux や lsof で原因プロセスを確認する・ディスクの物理的な問題を確認する:
dmesg | grep -i error でハードウェアエラーを確認する・I/Oスケジューラを確認する:
cat /sys/block/sda/queue/scheduler で現在のスケジューラを確認する注意:HDDとSSD・NVMeでは許容できる%utilの値の意味が異なります。NVMeは並列処理できるため、%util=100%でも必ずしも飽和していない場合があります。
「Device」欄に nvme0n1 が表示される場合
NVMe接続のSSDを使用している環境では、デバイス名が
nvme0n1 のように表示されます。これは正常な動作です。# NVMe環境でのiostat出力例 # iostat -xd nvme0n1 1 5 Device r/s w/s rkB/s wkB/s r_await w_await %util nvme0n1 125.30 48.20 502.30 193.80 0.08 0.12 4.20
最初の出力行が大きな値を示している場合
iostatの最初の出力行は起動からの累積統計です。この値は実際の運用状態を反映していないため、2行目以降(一定間隔での測定値)を参照してください。
本記事のまとめ
iostatコマンドでよく使う操作をまとめます。
| やりたいこと | コマンド |
|---|---|
| 基本的なI/O統計を確認する | iostat |
| 拡張統計(%util・await)を確認する | iostat -x |
| 1秒間隔で10回継続表示する | iostat -x 1 10 |
| デバイス統計のみ表示する | iostat -dx 1 5 |
| MB/s単位で表示する | iostat -xm 1 5 |
| 特定デバイスのみ監視する | iostat -x sda 1 10 |
| パーティション単位で表示する | iostat -xdp sda |
iostatはサーバー運用において、「遅い原因がCPUかディスクか」を最初に切り分けるための重要なコマンドです。
特に %iowait と %util の2つを押さえるだけで、I/Oボトルネックの有無が素早く判断できます。
関連コマンドも合わせて覚えておくと、障害調査の引き出しが増えます。
・topコマンドでCPU・メモリ使用率を確認する方法
・vmstatコマンドでCPU・メモリ・I/Oの負荷を確認する方法
「サーバーが重い」原因を、数値で特定できていますか?
iostatで%utilが高いことはわかっても、「次に何をすればいいか」が見えないことがあります。ネットの断片的な情報をつなぎ合わせるのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
