DTrace ユーザーガイド

引数を使用する D スクリプトを作成する

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 コンパイラで定義されます。

$[0-9]+

マクロ引数

$egid

実効グループ ID

$euid

実効ユーザー ID

$gid

実グループ ID

$pid

プロセス ID

$pgid

プロセスグループ ID

$ppid

親プロセス ID

$projid

プロジェクト ID

$sid

セッション ID

$target

ターゲットプロセス ID

$taskid

タスク ID

$uid

実ユーザー ID


例 3–3 PID 引数の例

次の例では、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