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


この記事の監修:宮崎智広(Linux教育歴15年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxtips > iostatコマンドでディスクI/Oを確認する方法|%utilとawaitの読み方と高負荷時の対処も
「ディスクが遅いのか、CPUが詰まっているのか、どっちが原因かわからない」
こうした状況は、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回実行する



「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も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によってはインストールが必要です。

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

【重要】最初の1行目の出力は起動からの累積値なので読み飛ばし、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

iostatで「今現在のI/Oが高い」ことを確認し、その原因となっているプロセスは 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 auxlsof で原因プロセスを確認する
ディスクの物理的な問題を確認する: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日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。


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

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

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

登録10秒/合わなければ解除3秒 / 詳細はこちら

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

宮崎 智広

この記事を書いた人

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

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

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