最終更新日 2025年2月12日

iostatコマンドとは?
本セクションでは以下の内容について解説します。
iostatコマンドの基本概要
iostat
コマンドは、LinuxシステムのディスクI/OやCPU使用率を監視するためのツールです。sysstat
パッケージに含まれており、システムのパフォーマンスを分析する際に役立ちます。特に、ディスクのボトルネックを特定するために頻繁に使用されます。

iostat
コマンドって何に使うんですか?

ディスクの読み書きの負荷状況を確認するのに使うよ。CPUの使用率も表示できるから、どのリソースがボトルネックになっているかを分析するのに便利なんだ。
なぜディスクI/O分析が重要なのか?
ディスクI/Oは、システム全体のパフォーマンスに大きな影響を与えます。特に、以下のような問題を特定する際に重要です。
- ディスクI/Oが高負荷になっていないか?
- CPUがI/O待ち状態(
iowait
)になっていないか? - SSDやHDDのパフォーマンスが適切に発揮されているか?
- 特定のプロセスが過剰にI/Oリソースを消費していないか?
iostat
を使うことで、これらの問題を特定し、適切なチューニングや対策を講じることができます。

なぜディスクI/Oを監視する必要があるんですか?

ディスクが遅いと、システム全体のレスポンスが悪くなるんだ。例えば、データベースのクエリが遅くなったり、アプリケーションのレスポンスが悪化したりする原因になる。

iostatを使うメリット
iostat
を活用することで、システムのパフォーマンス改善に役立ちます。主なメリットは以下の通りです。
- I/Oボトルネックの特定
- 高負荷のディスクデバイスを特定できる。
- SSDとHDDのパフォーマンスを比較できる。
- CPUとI/Oの関係を可視化
iowait
を確認することで、CPUがI/O待ちでどれだけ遅延しているか把握できる。
- 定期的な監視とトレンド分析
- ログを定期的に取得し、時間帯ごとの負荷変動を分析できる。

他のツールと何が違う?

iostat
以外にも vmstat
や iotop
がありますが、何が違うんですか?

vmstat
はCPUやメモリの動向を含めたシステム全体の状況を確認するのに便利。iotop
はリアルタイムでどのプロセスがI/Oを使っているかを確認できる。iostat
は、主にディスクの統計を詳細に分析するのに向いているよ。
iostatコマンドの基本的な使い方
本セクションでは以下の内容について解説します。
iostatのインストール方法(Debian系・RedHat系)
iostat
コマンドは、sysstat
パッケージに含まれています。システムにインストールされていない場合は、以下のコマンドでインストールできます。
Debian系(Ubuntu、Debian)
sudo apt update
sudo apt install sysstat
RedHat系(CentOS、RHEL、Fedora)
sudo yum install sysstat
もしくは
sudo dnf install sysstat

sysstat
がインストールできません。どうすればいいですか?

sysstat
はデフォルトで無効になっていることがあるから、リポジトリを有効化してみよう。yum-config-manager --enable PowerTools
や epel-release
を試してみて。

コマンドの基本構文
iostat
の基本的な構文は以下の通りです。
iostat [オプション] [間隔] [回数]
- オプション:出力の形式を変更するオプション(例:
-x
で詳細表示) - 間隔:何秒ごとにデータを取得するか(例:
2
→ 2秒ごと) - 回数:何回データを表示するか(例:
5
→ 5回)

iostat 2 5
ってどういう意味ですか?

2秒ごとに5回データを表示するってことだよ。負荷の変化を継続的に見たいときに使う。
![iostat の基本的な使い方
iostat の基本的な構文は以下の通りです。
iostat [オプション] [間隔] [回数]
オプションは出力の形式を変更します。間隔はデータ取得間隔、回数はデータ表示回数です。](https://www.goritarou.com/wp-content/uploads/2025/02/image-106-1024x465.png)
実行例と出力結果の見方
実行例
iostat
出力結果
Linux 5.4.0-90-generic (hostname) 02/10/2025 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
1.35 0.00 0.43 0.15 0.00 98.07
Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
sda 3.00 100.50 50.25 10050000 5025000
この出力で特に注目すべきポイント
%iowait
:CPUがI/O待ちでどれだけ待機しているかtps
:1秒あたりのI/Oリクエスト回数kB_read/s
/kB_wrtn/s
:読み書き速度(KB/s)

iostat
の出力結果で、何を重点的に見ればいいですか?

%iowait
が高すぎるとCPUがI/O待ちになっている可能性があるから、要チェック。あと、tps
や kB_read/s
を見て、どのディスクが高負荷なのかを判断するといいよ。
これで、iostat
の基本的な使い方が理解できたはずです。次のセクションでは、iostat
のオプションを詳しく解説していきます。

iostatのオプション一覧と詳細解説
iostat
コマンドは、オプションを活用することで、より詳細なシステム分析が可能になります。以下に主要なオプションの詳細を解説します。

-c CPU使用率の表示
CPUの負荷状況を確認するには -c
オプションを使用します。
iostat -c
出力例
avg-cpu: %user %nice %system %iowait %steal %idle
2.45 0.00 1.32 0.78 0.00 95.45
項目 | 意味 | 補足 |
---|---|---|
%user | ユーザーが実行しているプログラムが使っているCPUの割合 | アプリやコマンドなど、ユーザーが起動したプロセスがCPUをどれくらい使っているかを示す。 |
%nice | 優先度を下げて実行されているプログラムが使っているCPUの割合 | nice コマンドで優先度を下げた(低負荷の)プロセスのCPU使用率。通常は0に近いことが多い。 |
%system | OS(カーネル)が使っているCPUの割合 | ファイルの読み書きやネットワーク処理など、システムの内部処理で使われているCPUの割合。 |
%iowait | CPUがディスクやネットワークの応答待ちで何もできずにいる時間の割合 | CPUが「仕事をしたいけど、データを読み書き中で待たされている」時間。高すぎるとディスクI/Oが遅い可能性がある。 |
%steal | 仮想環境(VPSなど)で、他の仮想マシンにCPUを奪われた時間の割合 | クラウドや仮想サーバーを使っている場合に、他のサーバーとCPUを共有していて待たされる時間。通常、物理マシンなら0%。 |
%idle | CPUが何もしていない時間の割合 | 「CPUが暇な時間」。高ければ余裕があり、低いと負荷が高い状態。100%に近いとほぼ使われていない。 |

%iowait
が高いと何が問題なんですか?

CPUがI/Oの完了を待っている時間が長いと、ディスクがボトルネックになっている可能性がある。ストレージの遅延を疑ってみよう。

-d ディスクI/O統計の表示
ディスクI/Oの状況を確認するには -d
オプションを使用します。
iostat -d
出力例
Device tps kB_read/s kB_wrtn/s
sda 4.00 120.00 80.50
項目 | 意味 | 初心者向けの補足 |
---|---|---|
Device | ディスクデバイス名(例: sda, nvme0n1 など) | 監視対象のストレージ(HDDやSSD)の名前。lsblk コマンドで確認できる。 |
tps | 1秒あたりのI/Oリクエスト数(Transaction Per Second) | ディスクに対して「何回」読み書き要求が発生したかを示す。数値が高いほど負荷が高い。 |
kB_read/s | 1秒あたりのディスクからの読み取りデータ量(KB単位) | どれくらいのデータをディスクから「読み取っているか」。高いと大量のデータを読み込んでいる。 |
kB_wrtn/s | 1秒あたりのディスクへの書き込みデータ量(KB単位) | どれくらいのデータをディスクに「書き込んでいるか」。ログやデータベースの負荷が高いと増加する。 |

tps
が高いと何を意味しますか?

ディスクが多くのリクエストを処理していることを意味するよ。ただし、性能が許容範囲内かどうか iostat -x
で詳細を確認したほうがいい。

-x 詳細な拡張統計情報
-x
を使うと、ディスクの詳細なパフォーマンスデータを取得できます。
iostat -x
出力例
Device r/s w/s await svctm %util
sda 2.5 1.5 10.2 5.3 65.2
項目 | 意味 | 初心者向けの補足 |
---|---|---|
Device | ディスクデバイス名(例: sda, nvme0n1 など) | 監視対象のストレージ(HDDやSSD)の名前。lsblk コマンドで確認できる。 |
r/s | 1秒あたりの読み取りリクエスト数(Reads per Second) | 1秒間にディスクから「何回」データを読み取ったか。数値が高いと読み取り負荷が大きい。 |
w/s | 1秒あたりの書き込みリクエスト数(Writes per Second) | 1秒間にディスクに「何回」データを書き込んだか。データベースやログ処理が多いと数値が高くなる。 |
await | I/Oリクエストの平均待ち時間(ミリ秒) | ディスクの応答を待っている時間。値が高いと、I/Oの遅延が発生している可能性がある。 |
svctm | I/Oリクエストの平均処理時間(ミリ秒) | 1つのI/Oリクエストを処理するのにかかる時間。値が低いほどディスクの処理速度が速い。 |
%util | ディスクの使用率(0~100%) | 100%に近いとディスクがフル稼働している状態。高すぎるとI/Oボトルネックが発生している可能性あり。 |

await
と svctm
はどう違うんですか?

await
はキューにリクエストが溜まる時間を含めた待ち時間、svctm
は純粋な処理時間。await
が高い場合はI/Oが詰まっている可能性があるよ。

-t タイムスタンプ付き表示
時系列データを取得するには -t
を使います。
iostat -t 2 3
※2秒間隔で3回測定し、時刻を表示します。
出力結果
Linux 5.4.0-90-generic (hostname) 02/12/2025 _x86_64_ (8 CPU)
12:00:01 AM
avg-cpu: %user %nice %system %iowait %steal %idle
3.25 0.00 1.75 0.50 0.00 94.50
Device tps kB_read/s kB_wrtn/s
sda 5.00 150.50 75.25
nvme0n1 2.00 300.00 100.00
12:00:03 AM
avg-cpu: %user %nice %system %iowait %steal %idle
4.50 0.00 2.00 0.75 0.00 92.75
Device tps kB_read/s kB_wrtn/s
sda 4.50 140.00 80.00
nvme0n1 2.50 310.00 110.00
12:00:05 AM
avg-cpu: %user %nice %system %iowait %steal %idle
5.00 0.00 2.25 0.50 0.00 92.25
Device tps kB_read/s kB_wrtn/s
sda 6.00 160.00 85.00
nvme0n1 3.00 320.00 120.00

時間ごとの負荷を確認したい場合はどうしたらいいですか?

cron
で iostat -t
の結果をログに残すと、トレンド分析ができるよ。

-y 最初のレポートを無視する
iostat
の最初の出力はブート後の平均値なので、これを省略するには -y
を使います。
iostat -y 2 5
※2秒ごとに5回測定、初回レポートを省略します。
出力結果
Linux 5.4.0-90-generic (hostname) 02/12/2025 _x86_64_ (8 CPU)
avg-cpu: %user %nice %system %iowait %steal %idle
2.50 0.00 1.50 0.50 0.00 95.50
Device tps kB_read/s kB_wrtn/s
sda 4.00 120.00 60.00
nvme0n1 3.00 300.00 150.00
avg-cpu: %user %nice %system %iowait %steal %idle
3.00 0.00 1.75 0.60 0.00 94.65
Device tps kB_read/s kB_wrtn/s
sda 4.50 130.00 70.00
nvme0n1 2.80 280.00 140.00
avg-cpu: %user %nice %system %iowait %steal %idle
3.75 0.00 2.00 0.75 0.00 93.50
Device tps kB_read/s kB_wrtn/s
sda 5.00 140.00 80.00
nvme0n1 3.20 320.00 160.00
-z ゼロ値のデバイスを非表示
I/Oが発生していないデバイスを非表示にできます。
iostat -z
※余計な情報を省き、必要なデータのみを確認可能。
実践!iostatを活用したディスクI/O分析
本セクションでは実際に現場でよく使用するディスクIO分析の事例を紹介します。

【ケース1】ディスクI/Oのボトルネックを特定する
I/Oが遅い場合、まず iostat -x
で await
と %util
を確認します。
iostat -x 2 5

ディスクのレスポンスが悪いんですが、どこを見ればいいですか?

await
が高いと、I/Oリクエストの遅延が発生している可能性がある。%util
が高いならディスクの負荷が原因かも。
【ケース2】CPUとI/Oの関係を分析する
I/O待ちが多いとCPUが使われずに待機します。iostat -c
で %iowait
をチェック。
iostat -c 2 5

CPU使用率が低いのに、システムの応答が遅いのはなぜですか?

%iowait
が高いと、CPUがディスクI/Oを待っている状態。ディスク性能の問題かもしれない。
【ケース3】SSDとHDDのパフォーマンスを比較する
HDDとSSDの性能差を調べるには iostat -x
を使い、await
と svctm
を比較します。
iostat -x /dev/sda /dev/nvme0n1 2 5

SSDのほうが速いはずなのに、あまり変わらないのはなぜ?

ファイルシステムの設定やキューの深さ(queue_depth
)も影響する。iostat
だけでなく fio
を使ってみるのも手だね。
このように、iostat
を使えば、ディスクのボトルネックやシステムのI/O負荷を分析できます。次のステップとして、ログを自動取得して傾向分析を行う方法も検討するとよいでしょう。
iostatの出力結果を読み解くポイント
iostat
の出力結果を正しく理解することで、ディスクのパフォーマンスを適切に評価できます。特に、各カラムの意味を把握し、重要な指標を読み取ることが重要です。

各カラムの意味と解釈
iostat -x
の出力は以下のようになっています。
Device rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sda 1.2 2.4 30.5 20.8 1024.5 512.3 45.8 0.5 10.2 5.3 65.2
項目 | 意味 | 補足 |
---|---|---|
rrqm/s | 1秒あたりにマージ(統合)された読み取りリクエストの数 | OSが同じディスクへの読み取り要求をまとめて処理した回数。HDDでは多いと効率的、SSDでは少なくても問題ない。 |
wrqm/s | 1秒あたりにマージ(統合)された書き込みリクエストの数 | OSが書き込み要求をまとめて処理した回数。値が高いほどI/Oの最適化がされている可能性がある。 |
r/s | 1秒あたりのディスク読み取り回数 | 1秒間にどれくらいの回数、データをディスクから読み取っているかを示す。数値が高いと読み取り負荷が大きい。 |
w/s | 1秒あたりのディスク書き込み回数 | 1秒間にどれくらいの回数、データを書き込んでいるかを示す。ログやデータベースの負荷が高いと数値が増える。 |
rkB/s | 1秒あたりに読み取られたデータ量(KB) | 1秒間にディスクからどれだけのデータを読み取ったか。数値が高いとデータの読み込みが多い。 |
wkB/s | 1秒あたりに書き込まれたデータ量(KB) | 1秒間にディスクへどれだけのデータを書き込んだか。ログやデータベースの処理が多いと増える。 |
avgrq-sz | 1回のリクエストあたりの平均データサイズ(KB) | 1回の読み書きリクエストがどれくらいのサイズのデータを扱っているか。値が大きいと1回でたくさんのデータを処理している。 |
avgqu-sz | I/Oキューの平均長さ | ディスクが処理待ちのリクエストをどれくらい抱えているか。値が高いとI/Oが詰まっている可能性あり。 |
await | 1つのリクエストが完了するまでの平均待ち時間(ms) | データの読み書きの待ち時間。高いとディスクが遅い可能性がある。通常、SSDよりHDDの方が値が高い。 |
svctm | 1つのリクエストの処理時間(ms) | ディスクが1回のI/Oリクエストを処理するのにかかる時間。短いほど速い。 |
%util | ディスクの使用率(100%に近いと過負荷) | 100%に近いとディスクがフル稼働している状態。値が高すぎるとI/Oのボトルネックが発生している可能性がある。 |

どのカラムを重点的に見るべきですか?

基本的には await
、%util
、r/s
や w/s
の値をチェックするといい。ディスクが詰まっているか、負荷が高すぎるかが分かるよ。

rrqm/s と wrqm/s の役割
- rrqm/s, wrqm/s は、ブロックレイヤーで統合されたI/Oリクエストの数を示します。
- これらの値が高いほど、OSが効率的にリクエストを処理している可能性があります。
- 逆に、値が 0に近い 場合は、ストレージのI/Oスケジューリングが適切に行われていない可能性があります。

rrqm/s
と wrqm/s
がゼロに近いと問題なんですか?

リクエストが統合されずに直接処理されている可能性がある。HDDなら影響が大きいけど、SSDならそこまで気にしなくてもいいよ。
await・svctm・%utilの重要性
これらの値を正しく解釈することで、ディスクのボトルネックを特定できます。
- await(待ち時間) 高いとI/Oの遅延が発生している可能性
- svctm(サービス時間) 短いほどI/O処理が速い(ただし、測定精度が低いため参考値)
- %util(ディスク使用率) 100%に近いとディスクが過負荷

await
が高く %util
も高いと、何を疑うべきですか?

ディスクが処理しきれず、I/Oキューにリクエストが溜まっている。SSDに移行するか、RAIDの導入を検討してみるといいかも。
iotopとの使い分け
iotop
はリアルタイムで どのプロセスがI/Oを消費しているか を表示できます。
iotop -o
iostat
はディスク全体の統計を表示するが、iotop
はプロセス単位でI/Oを監視できます。

iostat
でディスクの負荷が高いとわかったんですが、原因がわかりません。

iotop
を使えば、どのプロセスがI/Oを多く使っているのか特定できるよ。

実践 iostatをスクリプトで活用する
iostat
を定期的に実行し、パフォーマンスを監視することで、システムのトラブルシューティングや負荷分析が容易になります。特に、ログを蓄積し、特定の条件でアラートを出す設定を行うと便利です。

定期的にログを取得するシェルスクリプト
定期的に iostat
の結果を取得し、ログとして保存するスクリプトを作成できます。
スクリプト例(iostat_log.sh)
#!/bin/bash
LOG_DIR="/var/log/iostat"
mkdir -p $LOG_DIR
LOG_FILE="$LOG_DIR/iostat_$(date +%F_%T).log"
iostat -x 1 5 > "$LOG_FILE"
※1秒ごとに5回データを取得し、日時付きログファイルに保存します。

定期的に iostat
のデータを保存したいんですが、どうすればいいですか?

シェルスクリプトで iostat
の出力をログファイルに記録すればいいよ。定期実行するなら cron
を使うといいね。
cronを使った自動監視の設定
シェルスクリプトを cron
に設定し、定期的に実行できます。
cron設定例
*/5 * * * * /path/to/iostat_log.sh
※5分ごとにスクリプトを実行し、iostat
のデータを取得します。

手動で iostat
を実行するのは面倒なので、自動化したいです。

cron
を使えば、指定した間隔で自動的に実行できる。crontab -e
で設定できるよ。
awkやgrepを活用したデータ抽出方法
ログデータから特定の情報を抽出するには awk
や grep
を活用します。
特定のディスクの%utilが80%以上の行を抽出
awk '$NF > 80 {print $0}' /var/log/iostat/iostat_latest.log

ログの中からディスクの使用率が高いものだけ抜き出す方法は?

awk
を使えば、%util
の値が80%以上の行だけを抽出できるよ。
よくあるトラブルシューティング
本セクションではよくあるトラブルシューティングについて以下の内容を解説します。

iostatが出力されない・エラーが発生する場合の対処法
エラーiostat: command not found
対処法
sudo apt install sysstat # Debian系
sudo yum install sysstat # RedHat系

iostat
が使えないんですが、どうしたらいいですか?

sysstat
パッケージが入っていない可能性があるから、インストールしよう。
期待と異なる数値が出る場合のチェックポイント
%util
が高くawait
も高い → I/Oボトルネックの可能性%util
は低いがawait
が高い → ストレージのレスポンス遅延iowait
が高いが%util
は低い → CPUがI/O待ちになっている可能性

思ったようなデータが出ないのですが、何を疑えばいいですか?

各カラムの意味を確認しながら、CPUやメモリの状況も vmstat
でチェックするといい。
高負荷状態のディスクI/Oを軽減する方法
I/O負荷の原因となるプロセスを特定
iotop -o
I/Oスケジューリングを変更(cfq → noopやdeadline)
echo noop > /sys/block/sda/queue/scheduler
ディスクI/Oのリミットを設定(cgroupsを利用)
cgcreate -g blkio:/limitgroup echo "8:0 10485760" > /sys/fs/cgroup/blkio/limitgroup/blkio.throttle.write_bps_device

ディスクの負荷が高くてパフォーマンスが悪いです。

iotop
で負荷の原因を特定して、I/Oスケジューリングを最適化したり、cgroupsでリミットを設定すると改善できるよ。


ゴリタン
インフラエンジニアとして、ネットワークとサーバーの運用・保守・構築・設計に幅広く携わり、
現在は大規模政府公共データの移行プロジェクトを担当。
CCNPやLPICレベル3、AWSセキュリティスペシャリストなどの資格を保有しています。