Linuxサーバーのパフォーマンスが低下していると感じたとき、CPUやメモリの使用率だけを見ていませんか?
意外と見落としがちなのが「ディスクI/O」の負荷です。
ディスクへの読み書きが集中すると、アプリケーションの動作が重くなったり、全体のレスポンスが遅くなったりします。
そんなときに役立つのが「iotop」というコマンドです。
iotopを使えば、どのプロセスがどれだけのI/Oリソースを使用しているのかをリアルタイムで確認できます。
この記事では、iotopの基本的な使い方から、実際の活用例、注意点までをわかりやすく解説します。
iotop
は、LinuxでプロセスごとのディスクI/O使用状況を監視するためのツールです。
CPUやメモリと同様に、I/O(Input/Output)の使用状況も確認することで、システム全体のパフォーマンスを把握できます。
iotopは、以下のような特徴を持ちます。
top
コマンドのI/O版といったイメージです。
多くのLinuxディストリビューションで、iotopはパッケージ管理ツールからインストールできます。
sudo yum install iotop
sudo apt install iotop
インストールが完了したら、iotop
コマンドで起動できます。
iotopはroot権限でのみ正確な情報を表示するため、sudo
をつけて実行します。
sudo iotop
実行すると、以下のような情報が表示されます。
PID | USER | DISK READ | DISK WRITE | SWAPIN | IO | COMMAND |
---|
画面は定期的に更新され、リアルタイムで情報が追跡されます。
iotopは多くのオプションを備えており、状況に応じた使い方ができます。
sudo iotop -o
I/O操作をしているプロセスのみを表示します。
何もしていないプロセスを省くことで、ボトルネックの特定がしやすくなります。
sudo iotop -b -n 1
-bはバッチモード、-nは更新回数を指定します。
スクリプトでログを取るときや、定期的に監視したいときに便利です。
sudo iotop -u ユーザー名
特定のユーザーに関連するプロセスのみを表示します。
ある日、サーバーの動作が重くなったため、以下を実行。
sudo iotop -o
すると、rsync
が大量のファイルを同期中であることが判明。
I/Oリソースを使い切っていたことが原因だった。
このように、実行中のプロセスがリアルタイムで把握できるため、即座に対処できる。
深夜に定期的にI/Oが上がるが原因不明。以下のようなスクリプトをcronで設定。
sudo iotop -b -n 10 -d 10 >> /var/log/iotop.log
-b
: バッチモード-n 10
: 10回更新-d 10
: 10秒ごとに更新ログを後から確認することで、どの時間帯に何のプロセスがI/Oを発生させていたかを追跡可能に。
iotop
は /proc
以下の情報にアクセスするため、基本的にrootでの実行が必須です。
sudo権限がないユーザーでは、正確な情報が取得できません。
iotop
は、カーネルでCONFIG_TASKSTATS
とCONFIG_TASK_IO_ACCOUNTING
が有効になっている必要があります。
カーネル設定によっては利用できない場合もあるので、動作しないときはカーネルオプションを確認してください。
bashコピーする編集するzcat /proc/config.gz | grep TASK_IO_ACCOUNTING
リアルタイム監視ツールなので、画面に張り付いて使うには便利ですが、長期間のログ取得や統計分析にはiostat
やpidstat
などと組み合わせると良いでしょう。
ツール | 概要 | 向いている場面 |
---|---|---|
iotop | プロセス単位のリアルタイムI/O監視 | ボトルネックの特定 |
iostat | デバイス単位のI/O統計 | デバイス単位の負荷分析 |
pidstat -d | プロセスごとのI/Oを定期記録 | 長期間のI/O負荷観測 |
dstat | 複数のリソースを横断的に確認 | 総合的なパフォーマンスチェック |
iotop
は、ディスクI/Oのボトルネックを特定したいときに非常に便利なツールです。
リアルタイムでI/Oの多いプロセスを確認し、問題の原因を突き止めることができます。
とはいえ、万能ではなく、長期的な監視には他のツールと併用するのがベストです。
Linuxサーバーの管理をしている方、パフォーマンスチューニングに関心がある方は、ぜひiotop
を活用してみてください。