bootchart で起動時の動きを記録してみる[Linux]

このエントリーをはてなブックマークに追加


2006-03-07


Linux のブートプロセスを説明するのに、なんかいい見せ方ないかなぁと考えてたんですが、

システム起動時の負荷状態やプロセス遷移をグラフ化するには
http://www.atmarkit.co.jp/flinux/rensai/linuxtips/812usebootchart.html

で bootchart が紹介されていたのを思い出したので、試してみました。Debian だと apt-get で一発。bootchart-view もグラフ化するのに必要なので、一緒にインストールしておきます。

# apt-get install bootchart bootchart-view


bootchart は、/sbin/init の代わりに /sbin/bootchartd を使うことで、起動プロセスを

/var/log/bootchart.tgz


へ記録していきます(より正確には、/proc/stat, /proc/diskstats, /proc/[PID]/stat を参照しているそうなので、/proc がマウントされるまでは、それらから得られる情報は記録されないってことになりますね)

ちなみに、bootchart をインストールする時に、"acct" も入れとけ、って apt-get に言われたんですが、なんに使うんだろうと思ったら、kernel が "BSD Process Accounting", "BSD Process Accounting version 3 file format" をサポートしていると、bootchartd は accton を使って、プロセスの取りこぼしがないように記録してくれるそうです(/proc/[PID]/stat では、実行時間が短すぎるものは拾えないそうな)

なお、/boot/grub/menu.lst は、こんな感じに修正して利用しました。

title Debian GNU/Linux, kernel 2.6.15 for Bootchart
root (hd0,4)
kernel /boot/vmlinuz-2.6.15 libata.atapi_enabled=1 ide1=noprobe root=/dev/sda5 ro init=/sbin/bootchartd
initrd /boot/initrd.img-2.6.15
savedefault
boot


これで、reboot すると、/var/log/bootchart.tgz が生成されます。

これをグラフ化するのには bootchart コマンドを利用します(Javaです)

$ bootchart
Parsing /var/log/bootchart.tgz
Wrote image: ./bootchart.svgz


SVG か、渋いなぁ……どうやら、PNG や EPS も吐き出せるようなんですが、なぜかうまくいかない。こういう時はドキュメントを読むかな、ということで

/usr/share/doc/bootchart-view/README.Debian


に目を通してみると「Sun の JVM でしか PNG, EPS は吐き出せんとです」とか書いてある。ありゃ? SDKインストールしたんだけどなぁと思って、調べてみると

# update-alternatives --display java
java - status is auto.
 link currently points to /usr/lib/jvm/java-gcj/bin/java
/usr/lib/j2sdk1.5-sun/bin/java - priority 315
 slave java.1.gz: /usr/lib/j2sdk1.5-sun/man/man1/java.1.gz
/etc/alternatives/kaffe-system/bin/java - priority 300
 slave java.1.gz: /usr/share/man/man1/java.kaffe.1.gz
/usr/lib/jvm/java-gcj/bin/java - priority 1040
 slave java.1.gz: /usr/lib/jvm/java-gcj/man/man1/java.1.gz
/usr/bin/gij-wrapper-4.0 - priority 40
 slave java.1.gz: /usr/share/man/man1/gij-wrapper-4.0.1.gz
 slave rmiregistry: /usr/bin/grmiregistry-4.0
 slave rmiregistry.1.gz: /usr/share/man/man1/grmiregistry-4.0.1.gz
Current `best' version is /usr/lib/jvm/java-gcj/bin/java.


おっと、j2sdkに向いてないな。java-gcj が使われているらしい。ということで、j2sdk へ変更。

# update-alternatives --set java /usr/lib/j2sdk1.5-sun/bin/java


or

# update-alternatives --config java


ということで、もう一度実行。

$ bootchart -f png
Parsing /var/log/bootchart.tgz
Wrote image: ./bootchart.png


こんな感じで、今度はアボートすることなく、吐き出された :-)
実際の画像はこんな感じ(一部のみ掲載)

Image

なにがどういう順序で立ち上がってるかがよくわかる。これはいいかも?
どういうプロセスが立ち上がってて、それにどれだけの時間が掛かっているかも記録されるので、こういうのはちゃんと残しておくほうがよさそう。



IPv4/IPv6 meter
検索キーワードは複数指定できます
ChangeLogを検索
Google
Web www.kunitake.org
思ったより安い……時もある、Amazon

カテゴリ