前回に引き続いて、dstat その二です。
Linux には、kernel 2.6.20 以降から、IO Accounting という機能が組み込まれています。この機能は、簡単に言ってしまうと、各プロセスごとの IO 情報をカウントしてくれる機能です。この機能があると、プロセスごとの I/O が分かるので、どのプロセスが原因で I/O が重いとかが分かるようになります。
普段使っている CentOS 5.x 系は kernel 2.6.18 系なのですが、RHEL 5.4 のリリースノートをよく見てみると、次のような記述がありました。
・ストレージ/ファイルシステム関連のアップデート:
BlktraceによりブロックIOレイヤでのトレース機構を提供します。I/O accountingによりプロセスごとの実際のIOのアカウンティングが可能になりました。一般ユーザーが独自のファイルシステムを作成できるFUSE (Filesystems in user space) のカーネル基盤とユーティリティを提供します。
ということで、最新リリースである CentOS 5.4 でも対応しているようです。
前回紹介した dstat では、バージョン 0.6.7 以降から、dstat_topio という拡張プラグインが組み込まれて、この IO Accounting の機能にアクセスことができます。
CentOS で、公式で提供されているのはバージョン 0.6.6 なので、この機能を利用することはできません。なので、ソースコードをダウンロードして RPM を作ります。
$ wget http://dag.wieers.com/home-made/dstat/dstat-0.6.9.tar.bz2
$ rpmbuild -ta dstat-0.6.9.tar.bz2
dstat の tarball には、SPEC ファイルが含まれているので RPM をすぐに作成することができます。RPM を作成したら、CentOS 5.4 の環境にアップグレードするかインストールします。
次に dstat_topio という拡張プラグインを使うには、次のように実行します。
$dstat -M topio -d -M topbio
—-most-expensive—- -dsk/total- —-most-expensive—-
i/o process | read writ | block i/o process
init 275k:1490k | 396k 3375k | init 62k:1380k
mysqld 84k: 46k | 96k 792k | kjournald 0 : 132k
mysqld 107k: 30k | 192k 232k | mysqld 48k: 24k
mysqld 95k: 29k | 192k 272k | mysqld 80k: 36k
このように各プロセスごとの I/O 情報を取得することができます。
ちなみに、CentOS 5.3 の環境では、次のようなエラー表示になります。
$ dstat -M topio -d -M topbio
Module topio failed to load. (Kernel has no I/O accounting, use at least 2.6.20)
Module topbio failed to load. (Kernel has no I/O accounting, use at least 2.6.20)
-dsk/total-
read writ
58k 442k
0 24k
0 0
0 528k
ということで、必ず CentOS 5.4 の環境で使う必要があります。
この機能を使うことで、IO がボトルネックの場合、どのプロセスに原因があるのかを調査することができるので便利になりますね。
ちなみに、sar コマンドで有名な sysstat にも、バージョン 9.0 から pidstat というコマンドで同様の情報を取得することができますので、必要な人は導入してみるといいでしょう。







これは役に立ちますね。勉強になりました。
コメントありがとうございます!お役に立ったということで、とてもうれしいです。