Linux iostat コマンド
一、iostat コマンド概要
iostat(Input/Output Statistics)は、Linuxシステムにおける強力なパフォーマンス監視ツールであり、sysstatツールパッケージの一部です。主にシステムのディスクI/OアクティビティとCPU使用状況の監視に使用されます。
1.1 基本機能
- システムのディスクI/Oの読み書き速度を監視
- CPU使用率を確認
- デバイスの負荷状況を統計
- I/O性能のボトルネックを特定
1.2 代表的な使用シーン
- サーバー性能のチューニング
- ストレージデバイスの性能分析
- システムのボトルネック調査
- 容量計画
二、インストールと基本的な使い方
2.1 インストール方法
ほとんどのLinuxディストリビューションではデフォルトでiostatがインストールされていないため、先にsysstatパッケージをインストールする必要があります:
例
# Ubuntu/Debian
sudo apt-get install sysstat
# CentOS/RHEL
sudo yum install sysstat
# Fedora
sudo dnf install sysstat
sudo apt-get install sysstat
# CentOS/RHEL
sudo yum install sysstat
# Fedora
sudo dnf install sysstat
2.2 基本的なコマンド形式
例
iostat [オプション] [時間間隔] [回数]
簡単な例
例
# 全デバイスの統計情報を1回表示
iostat
# 2秒ごとに更新し、合計5回表示
iostat 2 5
iostat
# 2秒ごとに更新し、合計5回表示
iostat 2 5
三、コマンドオプションの詳細
3.1 よく使うオプション
| オプション | 説明 |
|---|---|
| -c | CPU使用状況のみ表示 |
| -d | ディスク使用状況のみ表示 |
| -h | 人間が読みやすい形式で表示(KB、MB、GBなど) |
| -k | データをKB単位で表示 |
| -m | データをMB単位で表示 |
| -N | デバイスマッピング名を表示 |
| -p | 指定したデバイスまたはパーティションの統計情報を表示 |
| -t | タイムスタンプを表示 |
| -x | 拡張統計情報を表示 |
| -y | 最初の統計をスキップ(通常は時間間隔と一緒に使用) |
3.2 上級オプション
| オプション | 説明 |
|---|---|
| -z | アクティビティがゼロのデバイスの出力を省略 |
| -j ID | 指定したデバイスの永続名を表示 |
| --dec={0|1|2} | 小数点以下の桁数を指定 |
四、出力結果の解釈
4.1 CPU統計部分
avg-cpu: %user %nice %system %iowait %steal %idle
5.32 0.00 1.06 0.25 0.00 93.37
- %user:ユーザーレベル(アプリケーション)のCPU使用率
- %nice:優先度が調整されたプロセスのCPU使用率
- %system:システムレベル(カーネル)のCPU使用率
- %iowait:CPUがI/O操作の完了を待機する時間の割合
- %steal:仮想環境における「奪われた」時間
- %idle:CPUアイドル時間の割合
4.2 ディスク統計部分(基本)
Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 1.02 12.34 5.67 1234567 567890
- tps:毎秒の転送回数(transfers per second)
- kB_read/s:毎秒の読み取りデータ量(KB)
- kB_wrtn/s:毎秒の書き込みデータ量(KB)
- kB_read:読み取りの総データ量(KB)
- kB_wrtn:書き込みの総データ量(KB)
4.3 拡張統計情報(-xオプション)
Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util sda 0.00 0.50 1.00 0.50 12.00 4.00 21.33 0.02 10.00 8.00 14.00 6.00 0.90
- rrqm/s:毎秒のマージされた読み取りリクエスト数
- wrqm/s:毎秒のマージされた書き込みリクエスト数
- r/s:毎秒完了した読み取りI/Oの回数
- w/s:毎秒完了した書き込みI/Oの回数
- rkB/s:毎秒の読み取りKB数
- wkB/s:毎秒の書き込みKB数
- avgrq-sz:平均I/O操作ごとのデータサイズ(セクター)
- avgqu-sz:平均I/Oキューの長さ
- await:平均I/O操作ごとの待機時間(ミリ秒)
- r_await:読み取り操作の平均待機時間(ミリ秒)
- w_await:書き込み操作の平均待機時間(ミリ秒)
- svctm:平均I/O操作ごとのサービス時間(ミリ秒)
- %util:デバイスの帯域幅使用率の割合
五、実用的なサンプル分析
5.1 特定のディスクを監視
例
# sdaディスクを監視し、2秒ごとに更新、合計3回表示
iostat -d -x sda 2 3
iostat -d -x sda 2 3
5.2 CPUとディスクの総合監視
例
# CPUとディスクを監視し、5秒ごとに更新、継続表示
iostat -c -d -x -t 5
iostat -c -d -x -t 5
5.3 MB単位で表示
例
# ディスク統計情報をMB単位で表示
iostat -d -m
iostat -d -m
5.4 すべてのパーティションを監視
例
# LVMを含むすべてのパーティションを監視
iostat -p ALL
iostat -p ALL
六、性能指標の解釈と最適化の提案
6.1 重要な性能指標
%util:デバイス使用率
80% はデバイスが飽和状態に近いことを示す
- 継続的に100% はデバイスがボトルネックになっていることを示す
await:I/O待機時間
- 通常は < 10ms であるべき
50ms は性能問題の可能性を示す
avgqu-sz:キューの長さ
1 はデバイスが過負荷の可能性を示す
6.2 よくある問題の診断
問題1:%utilが高いがスループットが低い
- 考えられる原因:ランダムI/Oが多すぎる
- 解決策:アプリケーションのI/Oパターンを最適化し、SSDの使用を検討する
問題2:awaitが高いが%utilが低い
- 考えられる原因:コントローラーまたはバスのボトルネック
- 解決策:HBAカードまたはストレージコントローラーを確認する
問題3:rkB/sまたはwkB/sが異常に高い
- 考えられる原因:アプリケーションによる大量の読み書き
- 解決策:アプリケーションを最適化するかキャッシュを増やす
七、他のツールとの連携
7.1 vmstatとの組み合わせ
例
# メモリとI/Oを同時に監視
vmstat 1 5 & iostat -x 1 5
vmstat 1 5 & iostat -x 1 5
7.2 sarとの組み合わせ
例
# 履歴I/Oデータを確認
sar -d
sar -d
7.3 iotopとの組み合わせ
例
# 具体的な高I/Oプロセスを特定
iotop
iotop
八、まとめとベストプラクティス
8.1 使用上のアドバイス
- 本番環境での監視時は、詳細データを取得するために-xオプションの使用を推奨
- 長期監視ではsarと組み合わせて履歴データを収集すべき
- 性能問題を分析する際は、CPUとI/Oのデータを同時に注視すべき
- 異なる時間帯の統計データを比較する方がより有意義
8.2 よく使うコマンドの組み合わせ
例
# 総合監視コマンド
iostat -c -d -x -t -m 5
# ディスクの拡張情報のみ監視
iostat -d -x 2
# 特定のパーティションを監視
iostat -p sda1 -x 1 10
iostat -c -d -x -t -m 5
# ディスクの拡張情報のみ監視
iostat -d -x 2
# 特定のパーティションを監視
iostat -p sda1 -x 1 10
iostatコマンドを習得することで、システム管理者はLinuxシステムのI/O性能を効果的に監視・分析し、ストレージ関連の性能ボトルネック問題を迅速に発見して解決できます。
その他の拡張