KUSANAGI で使える保守向けコマンド(iotop編)

大曲仁

今回は、ディスクのIOでボトルネックが発生した際に役立つ iotop コマンドを紹介したいと思います。
KUSANAGI には、IO関連のコマンドとして他にも dstat コマンドもインストールされていますが、dstat コマンドがIO全体の状況把握に役立つのに対し、iotop コマンドはどのプロセスでIOが発生し、それがどの程度であるのかを明示してくれるので、どのプロセスがIOのボトルネックとなっているかを特定するのに役立ちます。
ただし、KUSANAGI にはデフォルトで iotop コマンドはインストールされていませんので、別途インストールを行う必要があります。といっても base リポジトリに含まれていますし、依存関係もなく軽量なので dnf コマンドですぐにインストールができます。

dnf install iotop

iotopコマンドの見方

iotop コマンドはオプションなしでもある程度問題なく使えます。オプションを指定しない場合は、1秒間隔で更新されてその間に発生したプロセスごとのリード、ライト、スワップイン、IOの割合を表示してくれます。

Total DISK READ :     103.68 K/s | Total DISK WRITE :       2.41 M/s
Actual DISK READ:     103.68 K/s | Actual DISK WRITE:     453.14 K/s
   TID  PRIO  USER     DISK READ  DISK WRITE  SWAPIN     IO>    COMMAND
113608 be/4 mysql       0.00 B/s    0.00 B/s  0.00 %  0.28 % mysqld --basedir=/usr --datad~ea-99d0-e3e536f0ef8a:299276509
113628 be/4 mysql       0.00 B/s  430.10 K/s  0.00 %  0.19 % mysqld --basedir=/usr --datad~ea-99d0-e3e536f0ef8a:299276509
 86133 be/4 httpd      57.60 K/s  844.83 K/s  0.00 %  0.16 % nginx: worker process
 86131 be/4 httpd      46.08 K/s    0.00 B/s  0.00 %  0.14 % nginx: worker process
  2227 be/4 root        0.00 B/s    3.84 K/s  0.00 %  0.07 % monit -I

ソートの変更

コマンド実行後の初期はIOの降順での表示になっており、項目名がハイライト表示されいます。

ソートを変更するには、キーボードの左右カーソルで変更可能となっており、これでリード、ライト、スワップイン順での表示に切り替えられます。

保守時に使える主なオプション

iotop には、指定できるオプションがいくつかありますが、その中で私がよく使うオプションを指定しておきたいと思います。

  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -o, --only            only show processes or threads actually doing I/O
  -b, --batch           non-interactive mode
  -n NUM, --iter=NUM    number of iterations before ending [infinite]
  -d SEC, --delay=SEC   delay between iterations [1 second]
  -p PID, --pid=PID     processes/threads to monitor [all]
  -u USER, --user=USER  users to monitor [all]
  -P, --processes       only show processes, not all threads
  -a, --accumulated     show accumulated I/O instead of bandwidth
  -k, --kilobytes       use kilobytes instead of a human friendly unit
  -t, --time            add a timestamp on each line (implies --batch)
  -q, --quiet           suppress some lines of header (implies --batch)

IOが発生したプロセスのみ表示する o オプション

デフォルトでは、全プロセスを表示するのに対し、o オプションを指定すると、IOが発生したプロセスのみの表示に絞り込むことができます。IOのボトルネック把握のために使用する場合は、IOが発生していないプロセスの情報は不要なので、指定しておいたほうが見やすくなります。
なお、オプションを指定しないでも、コマンド実行後に o キーを押すことで絞り込むことができるので、覚えておくといいでしょう。

iotop -o

更新間隔を指定する d オプション

デフォルトの1秒間隔での更新では目が追いつかない場合は、d オプションで更新間隔を調整することが可能です。
o オプションと d オプションを併用すると、コマンド実行直後の表示のプロセス数が極端に少ないことに気が付きます。実行直後は更新間での実績が取れないため、ほぼコマンド実行時の瞬間の状況のみが表示されいるのではないかと思われます。

iotop -d 3

非インタラクティブモードの b オプション、更新回数を指定する n オプション

デフォルトでは画面を再描画して更新されるようになっていますが、b オプションを指定すると再描画ではなく追記されるようになります。
iotop の結果をファイルにリダイレクトするような場合、インタラクティブモードだと文字化けが発生してしまうので、b オプションを指定しておくと見やすくなります。また、n オプションで更新する回数を指定することができます。ファイルにリダイレクトするのであれば、(1回だと先に書いたようにコマンド実行直後の情報しか取得してくれないので2回が適当です)回数してしておけば必要な情報を取得した段階で終了となるので便利です。

iotop -o -b -n 2 -d 3 > io.txt

紹介してきたように iotop コマンドは、IO のボトルネック切り分けをするのに役立つ強力なコマンドです。
インストールされていないようであれば、是非インストールしてKUSANAGIを使いこなしてください。

<< Nginx の location でアクセス制限をかける際の落とし穴

関連記事

Webサイト運用の課題解決事例100選 プレゼント

Webサイト運用の課題を弊社プロダクトで解決したお客様にインタビュー取材を行い、100の事例を108ページに及ぶ事例集としてまとめました。

・100事例のWebサイト運用の課題と解決手法、解決後の直接、間接的効果がわかる

・情報通信、 IT、金融、メディア、官公庁、学校などの業種ごとに事例を確認できる

・特集では1社の事例を3ページに渡り背景からシステム構成まで詳解