3 DTraceの使用例
次の例は、DTrace v2.0の現在の機能を示しています。例では、コマンドがrootとして実行され、/usr/sbin
がPATH内にあることを前提にしています。
-
プローブを一覧表示します:
# dtrace -l DTrace 2.0.0 [Pre-Release with limited functionality] ID PROVIDER MODULE FUNCTION NAME 1 dtrace BEGIN 2 dtrace END 3 dtrace ERROR 4 fbt vmlinux trace_initcall_finish_cb entry 5 fbt vmlinux trace_initcall_finish_cb return ...
この特定のシステムには、次のものが含まれています。
-
3 dtraceプローブ
-
87890 fbtプローブ(kprobesに基づく)
-
1262 sdtプローブ(Linuxトレースポイントに基づく)
-
666 syscallプローブ
-
-
コンパイルされたDコードをeBPFプログラムとして出力する
-S
オプションと、コンパイル後に終了する-e
オプションを使用するスクリプトの例:# dtrace -Sen 'write:entry { trace(1) }' DTrace 2.0.0 [Pre-Release with limited functionality] Disassembly of ::write:entry DIFO 0x46af600 returns D type (integer) (size 8) [record 16 bytes] INS OFF OPCODE INSTRUCTION 000 000: 62 a 0 fef8 ffffffff stw [%fp-264], -1 ! = EPID 001 008: 62 a 0 fefc 00000000 stw [%fp-260], 0 002 016: 7a a 0 ff00 00000000 stdw [%fp-256], 0 003 024: 7a a 0 ff08 00000000 stdw [%fp-248], 0 004 032: 7a a 0 ff10 00000000 stdw [%f [...]
-
スクリプトの例:
# dtrace -n ' syscall::write:* { this->x = 3; /* clause-local variables */ this->y = 8; trace(this->x * this->y); trace(&`max_pfn); }'
スクリプトの例の内容は次のとおりです:
-
ワイルドカードを使用して、すべての
write()
システム・コール・プローブを同時にプローブ。 -
カーネル識別子(
max_pfn
)およびその他のデータ項目のアドレスを記録するプローブ。 -
複数のプローブを単一のアクションに関連付けます。
-
節ローカル変数が使用されます。
-
trace()
アクションを使用して出力が報告されます。
-