2008年9月15日月曜日

dtraceをつかってみよう。

DTraceとは
システム内で何が実行されているかを駆動中のシステムでリアルタイムに知ることができます。
デバッグ用のバイナリやカーネルを入れ替えることなく駆動中に障害解析ができるすばらしいものです。


基本的にはスーパーユーザーで実行するので

$ sudo su [enter]

でスーパーユーザーになる。

Probe一覧の表示
# dtrace -l [enter]
ID PROVIDER MODULE FUNCTION NAME
1 dtrace BEGIN
2 dtrace END
3 dtrace ERROR
..... たくさん表示されます。
これがProbe可能なProbe
Mac OS X 10.5.4で20742件ありました。

出力結果はID, PROVIDER, MODULE, FUNCTION, NAMEと並んでる

dtraceはD言語のスクリプトを使う。

下記のオプションでProbeを有効にできる
dtrace -i [probe id]
dtrace -P [provider name]
dtrace -m [module name]
dtrace -f [function name]
dtrace -n [probe name]

下記のオプションでD scriptファイルを指定できる
dtrace -s [D script]

集計関数をつかってdtraceを使ってみる。
countでwriteを呼ばれた回数をカウントしてアプリケーション毎に出力
# dtrace -n 'syscall::write:entry { @counts[execname] = count(); }' [enter]
dtrace: description 'syscall::write:entry ' matched 1 probe

ここでほかのアプリケーションとかを動かしたりする
でおわったらControl + Cを押す
^C
Application1 1
Application2 1
Application3 1
Application4 1

上記のような感じでアプリケーション名と回数が表示する。

countの他、集計は
sum() 引数で与えられた値の合計値を返す
avg() 引数で与えられた値の平均値を返す
min() 引数で与えられた値のうち最小値を返す
max() 引数で与えられた値のうち最大値を返す

集計結果をグラフで出力する関数
lquantize() 第 1 引数で与えられた値を、第 2, 3, 4 引数で与えられたリニア(線形)の単位に分けて回数を集計
quantize() 引数で与えられた値を 2 の累乗の単位に分けて集計

D scriptのサンプルなどがあるのでそれをつかうのがよいとおもう。

0 件のコメント: