## はじめに
サーバーが妙に重い、ロードアベレージは高いがプロセッサは余裕がある、`top`で見ても明らかな食い手がいない——こうした状況の多くはディスクI/Oがボトルネックになっています。`iotop`はその名の通り「top のI/O版」で、プロセスごとの読み書き速度をリアルタイムに可視化できる必須ツールです。
iotopはCAP_NET_ADMINとカーネルのtaskstats機能を必要とするため、通常は`sudo`での実行が前提です。ログ蓄積目的でなく原因切り分けに使うのが定石で、加えて`iostat`や`pidstat -d`と組み合わせると、デバイス単位/プロセス単位の両方向から問題を捉えられます。
本記事では、iotopの基本操作と典型的なI/O障害調査のフローを解説します。
## 症状・背景
– システムがロードアベレージ高騰中だがプロセッサ使用率は低い
– ディスクのbusyランプが常時点灯しているような重さを感じる
– バックアップやログ書き出しが他プロセスを遅らせている
– どのプロセスがどれだけI/Oを発生させているか可視化したい
## 手順・設定方法
### ステップ1: iotopをインストールする
多くのディストリビューションでデフォルトでは入っていません。
“`bash
# Debian/Ubuntu
sudo apt install -y iotop
# RHEL/CentOS/AlmaLinux
sudo dnf install -y iotop
# バージョン確認
iotop –version
# 起動(rootまたはsudo必須)
sudo iotop
“`
### ステップ2: 実行中のI/Oを観察する
基本的な見方を押さえます。
“`bash
# 実際にI/Oが発生しているプロセスのみ表示
sudo iotop -o
# 累計I/O表示(差分ではなく合計)
sudo iotop -a
# バッチモード(ログ取得用)
sudo iotop -b -n 5 -d 2 -o > iotop.log
# ユーザー指定で監視
sudo iotop -u www-data
“`
iotop実行中のキー操作:
– `o`: アクティブプロセスのみ表示の切替
– `a`: 累計/瞬時の切替
– `r`: 表示順を逆転
– `q`: 終了
### ステップ3: iostatでデバイス単位の状況を見る
プロセス側と並行してデバイス側も確認します。
“`bash
# sysstatパッケージをインストール
sudo apt install -y sysstat # またはdnf install sysstat
# CPUとデバイスI/Oを2秒ごと
iostat -xz 2
# デバイス指定(sda)で詳細統計
iostat -dx sda 1
# %util が80%超ならデバイスがボトルネック
iostat -dx 1 5 | grep -E “Device|sda”
“`
### ステップ4: pidstatでプロセス別の継続観渫
iotopより安定して履歴を取れます。
“`bash
# プロセス別のディスクI/Oを1秒ごとに表示
pidstat -d 1
# 全プロセスを表示し、10秒間記録
pidstat -d 1 10
# 特定PIDだけ追跡
pidstat -d -p $(pgrep -f mysqld) 1
# 出力をCSV風にして後で集計
pidstat -d 1 30 | awk ‘/Average:/{print $4,$5,$7,$NF}’
“`
## 注意事項
– iotopは特権が必要、`/proc/sys/kernel/task_delayacct=1`が必要な環境もある
– バックアップやrsyncが上位に来るのは正常、業務時間外への移動を検討
– swapによるI/Oも計上されるため、メモリ不足が真因のケースもある
– SSDでは`%util`が高くても十分な性能を出していることがある(参考値として見る)
## まとめ
1. **iotop -o**: アクティブプロセスのみ表示で見やすく
2. **iostat -xz**: デバイス単位の%utilで物理的な限界を判断
3. **pidstat -d**: ロギング向きで履歴調査に最適
4. **swap注意**: I/O高騰の真因がメモリ不足のケース有
5. **タイミング**: バックアップ系は業務外時間にシフト
関連記事:
– [iostatでディスクI/O統計を確認する方法](/articles/linux-iostat/)
– [Linuxのメモリ使用量を確認する方法](/articles/linux-memory-usage-free/)
– [topコマンドでプロセスを監視する方法](/articles/linux-top-command/)




