2006年 5月 29日 月曜日
やっぱり Sun がスキ!
DTraceを使ってみよう#1(入門編)
■DTrace を使ってみよう。
Solaris 10 から DTrace 機能が搭載されました。 DTrace とはシステムに関連した問題(特に性能)をリアルタイムで分析する機能です。 この強力な機能を上手に活用すれば、問題を早期解決することができます。 従来は原因を特定するために、膨大な時間を必要としていました。 (adb, truss などのツールを駆使していました。)■特徴
・リアルタイムに分析、診断できるポイントを約4万箇所持っています。 ・D言語というスクリプト言語で制御します。■使ってみよう
何はともあれ動かしてみましょう。
まずはスクリプトを記述します。
# cat test.d
syscall::write:entry
/uid==0/
{
printf("%s",execname);
}
profile:::tick-1sec
/i++>=10/
{
exit(0);
}
このスクリプトをDTraceで実行してみます。 # dtrace -s test.d 10秒間、何かを表示します。■ちょっと解説
D言語の基本構造は次のようになっています。C言語に似ていますね。
プローブ記述
/述語/
{
アクション
}
・「プローブ記述」は(provider:module:function:name)の4つから構成されています。
項目を省略することもできます。問題箇所を絞り込むために利用します。
指定できる詳細なリストは dtrace -l で表示します。
syscall::write:entry とはシステムコールの書き込みの入り口が呼び出されたらを意味します。
・「述語」で条件を指定します。
省略することもできます。
uid==0 とはユーザIDを0(ルート)に限定します。
・「アクション」で動作を決定します。
printf("%s",execname);とはプロセス名を表示します。
つまり、 「システムコールの書き込みの入り口が呼び出されたら、ユーザIDが0のプロセス名を表示しなさい」 というスクリプトでした。
D言語の基本構造を並記することで、並列処理させることができます。
profile:::tick-1sec
/i++>=10/
{
exit(0);
}
とは10秒でdtraceを終了させることを意味します。便利な記述です。
これががないとCTRL-Cするまで永遠に dtrace を実行し続けます。
■集計関数
D言語には集計に便利な機能が盛り込まれています。従来であれば awk や perl を必要としました。
test.d を少し改良してみましょう。
# cat test1.d
syscall::write:entry
/uid==0/
{
@c[execname]=count();
}
profile:::tick-1sec
/i++>=10/
{
exit(0);
}
実行してみましょう。 # dtrace -s test1.d dtrace: script 'test1.d' matched 2 probes dtrace: buffer size lowered to 2m dtrace: aggregation size lowered to 1m CPU ID FUNCTION:NAME 0 39250 :tick-1sec mozilla-bin 2 xscreensaver 2 gnome-netstatus- 5 dtrace 10 gnome-terminal 25 java 82■ちょっと解説
変更箇所はアクション部分です。集計関数と呼ばれるもので、次のような形で使われます。 @name[key]=aggfunc(args); aggfunc(args)は集計関数であり、count()は呼び出された回数を返します。 @name は集積体と呼ばれる変数です。 プロセス名execnameをキーとして、呼び出された回数が各変数に格納されます。
つまり10秒間 「システムコールの書き込みの入り口が呼び出された回数を、ユーザIDが0のプロセス名ごとにカウントしなさい」 というスクリプトでした。 これによりどんなプロセスがシステムコールを頻繁に呼び出しているのかを分析することができます。 集計関数には sum(), avr(), min(), max(), quantize(), lquantize() などがあります。
Posted at 04:27午後 5 29, 2006 by onodera in Sun | 投稿されたコメント[1]
技術評論社の細谷と申します。ブログへのコメントで失礼いたします。WEB+DB PRESSという技術情報誌でDTraceについての記事ご執筆をご相談させていただけないかと思い、ご連絡させていただいております。よろしければもう少し詳しくご説明させていただきますので、ご検討のほどお願いできませんでしょうか?
なにとぞよろしくお願いいたします。
Posted by 細谷謙吾 on 4月月 08日, 2009年 at 01:45 午後 JST #