iostatコマンドでディスクI/Oを確認する方法|%utilとawaitの読み方と高負荷時の対処も

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > iostatコマンドでディスクI/Oを確認する方法|%utilとawaitの読み方と高負荷時の対処も
「ディスクが遅いのか、CPUが詰まっているのか、どっちが原因かわからない」
こうした状況は、WebアプリケーションやデータベースサーバーのI/O監視で頻繁に直面します。topコマンドやvmstatではディスクI/Oの詳細が見えないため、ストレージ起因の問題を切り分けるのが難しいのです。

この記事では、iostatコマンドの実践的な使い方を解説します。
sysstatパッケージのインストールから、CPU統計・デバイス別I/O統計の読み方、%utilとawaitの正しい判断基準、継続監視、高I/O負荷の原因特定まで網羅します。

実行環境:RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済み

この記事のポイント

・iostat -x でデバイス別のI/O詳細統計(%util・await)を確認できる
・iostatは sysstatパッケージのインストールが必要
・%utilが80%超でI/Oボトルネックのサイン(NVMe SSDは100%でも余裕がある場合あり)
・継続監視は iostat -x 1 10 で1秒間隔10回実行する



「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

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によってはインストールが必要です。インストール後にsysstatサービスを有効化すると、sarコマンドで過去I/O傾向も追跡できるようになります。

1. RHEL系(RHEL / Rocky Linux / AlmaLinux)にインストールする


# sysstatパッケージをインストールする sudo dnf install -y sysstat # バージョンを確認する iostat -V # sysstat version 12.5.4 # (C) Sebastien Godard (sysstat orange.fr)

2. Ubuntu / Debianにインストールする


# パッケージリストを更新してからインストールする sudo apt update sudo apt install -y sysstat

3. サービスを有効化する(データ収集用)


iostatの単発実行だけなら不要ですが、sarコマンドと組み合わせて過去I/Oデータを蓄積する場合はsysstatサービスを有効化します。
Ubuntu/Debianでは /etc/default/sysstatENABLED="true" への変更も必要です。

# Ubuntu/Debian: /etc/default/sysstat の ENABLED を true に変更する sudo sed -i 's/ENABLED="false"/ENABLED="true"/' /etc/default/sysstat # systemctlでsysstatを有効化する(RHEL / Ubuntu共通) sudo 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超が警戒ライン
aqu-sz:デバイスへのI/Oキューの平均長 2以下が健全ペース・10超の常時積み上がりは要注意
%util:デバイスがビジー状態だった割合。80%超でボトルネックを疑う100%に近いと飽和状態(NVMe SSDは例外あり)

6. 継続して監視する(間隔と回数を指定)


障害調査では「今この瞬間の状態」を継続してみることが大切です。間隔(秒)と回数を指定して繰り返し実行します。

# 1秒間隔で10回表示する(ディスクI/Oのリアルタイム監視) iostat -x 1 10 # タイムスタンプ付き・MB単位で2秒間隔継続表示(Ctrl+Cで停止) iostat -xmt 2

【重要】最初の1行目の出力は起動からの累積値なので読み飛ばし、2行目以降の値を参照してください。
-t オプションを追加するとタイムスタンプが付くため、問題発生時刻の特定に役立ちます。

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を確認する(日付は sa+日付 例: sa09=9日) sar -d -p -f /var/log/sa/sa09

iostatで「今現在のI/Oが高い」ことを確認し、その原因となっているプロセスは iotop(別途インストール)や以下のコマンドで特定できます。

# I/Oを多く消費しているプロセスを確認する(iotopが使えない場合) ps aux --sort=-%cpu | head -10

9. cronで定期的にI/O統計を記録する


高負荷が夜間に発生する場合、cronで定期ログを取ると原因特定が容易になります。-t オプションでタイムスタンプも記録されるため、ログ分析の際にいつ高負荷が発生したかが一目でわかります。

# /etc/cron.d/iostat-monitor に以下を記述する例 # 毎時0分にI/O統計をタイムスタンプ付きでログに追記する 0 * * * * root iostat -dxmt 1 3 >> /var/log/iostat.log

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系の場合 sudo dnf install sysstat -y # Ubuntu/Debianの場合 sudo apt install sysstat -y

「%util」が常に100%に近い場合


ストレージのI/O負荷が高い状態ですが、%utilが100%だからといって必ずしも問題があるとは限りません。デバイスの種類と他の指標を合わせて判断してください。

問題ではないケース:
・NVMe SSDで%utilが100%でも、await(I/O完了までの平均待ち時間)が1ms未満で安定している
・バックアップ・バッチ処理など、想定内の高負荷で計画的にI/Oを発行している
・aqu-sz(平均キュー長)が1~2程度で滞留していない

問題があるケース:
・%utilが100%付近かつawaitが数十ms以上に跳ね上がっている
・r_await/w_awaitに大きな偏りがあり、書き込み側だけ極端に遅い
・aqu-szが10を超えてI/Oキューに常時積み上がっている

%util・await・aqu-szを組み合わせて継続観測すると傾向が掴みやすくなります。

# %util・await・aqu-szをタイムスタンプ付きで2秒間隔継続表示する iostat -xmt 2

大量書き込みプロセスの特定には ps auxlsof で原因プロセスを確認し、ハードウェアエラーは dmesg | grep -i error で確認してください。
また、I/Oスケジューラの確認には cat /sys/block/sda/queue/scheduler を使います。

「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

NVMe SSDはコントローラーが複数のI/Oキューを並列処理するため、%util=100%でも r_await/w_awaitが0.1ms前後なら飽和状態ではありません。

最初の出力行が大きな値を示している場合


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 -xmt 2
パーティション単位で表示するiostat -xdp sda

iostatはサーバー運用において、「遅い原因がCPUかディスクか」を最初に切り分けるための重要なコマンドです。
特に %iowait・%util・await の3つを押さえるだけで、I/Oボトルネックの有無が素早く判断できます。

関連コマンドも合わせて覚えておくと、障害調査の引き出しが増えます。

topコマンドでCPU・メモリ使用率を確認する方法
vmstatコマンドでCPU・メモリ・I/Oの負荷を確認する方法

「サーバーが重い」原因を、数値で特定できていますか?

iostatで%utilが高いことはわかっても、「次に何をすればいいか」が見えないことがあります。ネットの断片的な情報をつなぎ合わせるのではなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

<PR>手元に置いて学びを深める1冊

詳解 システム・パフォーマンス 第2版

iostatで拾ったI/O指標の意味と、そこからボトルネックを特定するプロセスを体系的に学べる一冊。現場でLinuxパフォーマンス分析を担うエンジニアのバイブルとして知られる実務書です。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。