dtrace コマンドを使って、実行可能なインタプリタファイルを作成できます。このファイルには、実行権を設定する必要があります。ファイルの先頭行は、#!/usr/sbin/dtrace -s にする必要があります。この行には、dtrace コマンドのほかのオプションを指定できます。複数のオプションを指定する場合も、ダッシュ (-) は 1 つだけ入力してください。s オプションは、次の例のように、最後に指定してください。
#!/usr/sbin/dtrace -qvs |
dtrace コマンドのオプションを、D スクリプトの #pragma 行を使用して指定できます。次の D スクリプトの抜粋を参照してください。
# cat -n mem2.d 1 #!/usr/sbin/dtrace -s 2 3 #pragma D option quiet 4 #pragma D option verbose 5 6 vminfo::: ... |
次の表に、#pragma 行で使用できるオプション名を一覧します。
表 3–1 DTrace コンシューマオプション
オプション名 |
値 |
dtrace 別名 |
説明 |
---|---|---|---|
aggrate |
時間 |
集積体の読み取りレート |
|
aggsize |
サイズ |
集積体バッファーサイズ |
|
bufresize |
auto または manual |
バッファーのサイズ変更ポリシー |
|
bufsize |
サイズ |
-b |
主バッファーサイズ |
cleanrate |
時間 |
クリーンアップレート |
|
cpu |
スカラー |
-c |
トレースを有効にする CPU |
defaultargs |
— |
未知のマクロ引数の参照を許可する |
|
destructive |
— |
-w |
破壊アクションを許可する |
dynvarsize |
サイズ |
動的変数空間のサイズ |
|
flowindent |
— |
-F |
関数の開始 (entry) をインデントし、その前に -> を付ける。関数の終了 (return) のインデントを解除し、その前に <- を付ける |
grabanon |
— |
-a |
匿名状態を要求する |
jstackframes |
スカラー |
jstack() のデフォルトスタックフレームの数 |
|
jstackstrsize |
スカラー |
jstack() の文字列空間のデフォルトサイズ |
|
nspec |
スカラー |
投機の数 |
|
quiet |
— |
-q |
明示的にトレースされたデータだけを出力する |
specsize |
サイズ |
投機バッファーサイズ |
|
strsize |
サイズ |
文字列サイズ |
|
stackframes |
スカラー |
スタックフレームの数 |
|
stackindent |
スカラー |
stack() と ustack() の出力をインデントするときに使用する空白文字の数 |
|
statusrate |
時間 |
状態チェックレート |
|
switchrate |
時間 |
バッファー切り替えレート |
|
ustackframes |
スカラー |
ユーザースタックフレームの数 |
一連の組み込みマクロ変数も、D スクリプトで参照できます。これらのマクロ変数は、D コンパイラで定義されます。
マクロ引数
実効グループ ID
実効ユーザー ID
実グループ ID
プロセス ID
プロセスグループ ID
親プロセス ID
プロジェクト ID
セッション ID
ターゲットプロセス ID
タスク ID
実ユーザー ID
次の例では、D スクリプト syscalls2.d に、実行中の vi プロセスの PID が渡されます。vi コマンドが終了すると、D スクリプトも終了します。
# cat -n syscalls2.d 1 #!/usr/sbin/dtrace -qs 2 3 syscall:::entry 4 /pid == $1/ 5 { 6 @[probefunc] = count(); 7 } 8 syscall::rexit:entry 9 { 10 exit(0); 11 } # pgrep vi 2208 # ./syscalls2.d 2208 rexit 1 setpgrp 1 creat 1 getpid 1 open 1 lstat64 1 stat64 1 fdsync 1 unlink 1 close 1 alarm 1 lseek 1 sigaction 1 ioctl 1 read 1 write 1 |