trace デーモン

目的

選択されたシステム・イベントを記録します。

構文

trace -a  -g ] ] [  -f  -l ] [ -b |  -B] [ -c] [ -C [ CPUList | all ]] [  -d ] [  -h ] [ -j Event ,Event ] ] [ -k Event ,Event ] ] [ -J Event-group [ ,Event-group ]] [ -K Event-group [ ,Event-group ]] [  -m Message ]  [  -n ] [  -o Name ] [  -o- ] [  -p ] [  -s ] [  -L Size ] [  -T Size ]

説明

trace デーモンは、トレース・セッションを構成して、システム・イベントの収集を開始します。トレース機能によって収集されたデータはトレース・ログに記録されます。トレース・ログからのレポートは trcrpt コマンドによって生成されます。

-a フラグを指定して起動すると、 trace デーモンは非同期で (つまり、バックグラウンド・タスクとして) 実行されます。それ以外の場合は、対話式で実行され、 サブコマンドを要求するプロンプトが出されます。

トレース・データの収集には、以下の 3 つのモードがあります。

代替 (デフォルト) トレース・イベントはすべてトレース・ログ・ファイルにキャプチャーされます。
循環 ( -l) トレース・イベントはメモリー内トレース・バッファー内部で折り返すため、トレース・データの収集が停止するまでトレース・ログ・ファイルにキャプチャーされません。
単一 ( -f) メモリー内トレース・バッファーがいっぱいになるとトレース・イベントの収集は停止し、バッファーの内容がトレース・ログ・ファイルにキャプチャーされます。
バッファー割り当て トレース・バッファーは、カーネル・ヒープから割り当てられるか、個別のセグメントに書き込まれます。デフォルトでは、バッファー・サイズの要求が大き過ぎてバッファーがカーネル・ヒープに収まらないことがない限り (この場合バッファーは個別のセグメントに割り当てられる)、バッファーはカーネル・ヒープから割り当てられます。個別セグメントからのバッファーの割り当ては、幾分トレース・パフォーマンスの妨げになります。しかし、個別のセグメントのバッファーは、ピン・メモリーを占めるだけで、ページング・スペースを取りません。バッファー割り当てのタイプは、オプションの -b または -B フラグによって指定することができます。

フラグ

-a trace デーモンを非同期で (つまり、バックグラウンド・タスクとして) 実行します。この方法で trace を開始した後、trcon コマンド、trcoff コマンド、または trcstop コマンドを使用すると、トレースの開始、トレースの停止、またはトレース・セッションの終了を行うことができます。この 3 つのコマンドは、trace へのリンクとしてインプリメントされています。
-b バッファーをカーネル・ヒープから割り当てます。要求されたバッファー・スペースがカーネル・ヒープから入手できない場合、コマンドは失敗します。
注:
-b フラグは 32 ビット・カーネルでのみ有効です。
-B バッファーを個別のセグメントに割り当てます。
注:
-B フラグは 32 ビット・カーネルでのみ有効です。
-c トレース・ログ・ファイルを、その名前に .old を追加して保存します。
-C [ CPUList | all ] CPUList 内の CPU ごとに、バッファーのセットを 1 つ使用してトレースします。 CPU はコンマで区切るか、または二重引用符で囲んでからコンマやブランクで区切ることができます。すべての CPU をトレースするには、 all を指定します。このフラグは CPU ごとに 1 セットのバッファーを使用し、CPU ごとに 1 つのファイルを作成するので、メモリーおよびファイル・スペースを大量に消費する場合があり、使用には注意が必要です。作成されるファイルには、trcfiletrcfile-0trcfile-1 などの名前が付けられます。ここで、01 などは CPU 番号です。 -T または -L が指定されている場合、サイズはバッファーの各セットおよび各ファイルに適用されます。ユニプロセッサー・システムでは、 -C all を指定できますが、 CPU 番号のリストを使用して -C を指定しても、無視されます。複数の CPU を指定するために -C を使用する場合 (-Call-C "0 1" など)、関連するバッファーはシステム・ダンプに入れられません。
-d トレース・データ収集の自動開始を使用不可にします。トレース・データ収集の開始を遅らせます。trace デーモンを発行すると、トレース・データの収集は通常自動的に開始されます。トレース・データの収集を開始するには、 trcon サブコマンドを使用します。
-f trace デーモンを単一モードで実行します。メモリー内トレース・バッファーがいっぱいになると、トレース・データの収集はすぐに停止します。次にトレース・データがトレース・ログに書き込まれます。トレース・データの収集を再開して、バッファーいっぱいのデータをキャプチャーするには、trcon サブコマンドを使います。バッファーがいっぱいになる前に trcoff サブコマンドを実行すると、トレース・データの収集は停止し、現在バッファーに入っている内容がトレース・ログに書き込まれます。
-g トレース・セッションを汎用トレース・チャネル上 (チャネル 1 から 7) で始動します。このフラグは、trace が非同期で実行されるとき (-a フラグを指定したとき) のみ動作します。コマンドの戻りコードはチャネル番号です。チャネル番号は汎用トレース・コール・サブルーチンで引き続き使用しなければなりません。汎用トレース・セッションを終了するには、コマンド trcstop -<channel_number> を使用します。
-h ヘッダー・レコードをトレース・ログに書き込まないようにします。通常、trace デーモンはトレース・ログの最初にヘッダー・レコードを書き込みますが、ヘッダー・レコードには以下のような項目が含まれます。つまり、日付と時刻 (date コマンドから)、システム名、バージョンとリリース番号、ノード識別番号、コンピューター識別番号 (uname -a コマンドから)、ユーザー定義メッセージなどです。trcrpt コマンド出力のトレース・ログの先頭に、ヘッダー・レコードの情報が書き込まれます。
-j Event[,Event]  
-k Event[,Event] トレース・データを収集したいユーザー定義イベントを指定するか (-j)、またはトレース・データから除外したいユーザー定義イベントを指定します (-k)。Event リスト項目はコンマで区切るか、または二重引用符で囲んでからコンマやブランクで区切ることができます。

注: 以下のイベントは、trcrpt レポートで pid、 cpuid、および exec パス名を決定するのに使用されます。

106 DISPATCH
10C DISPATCH IDLE PROCESS
134 EXEC SYSTEM CALL
139 FORK SYSTEM CALL
465 KTHREAD CREATE

これらのイベントのいずれかが除外されると、trcrpt コマンドが報告する情報は不完全なものになります。したがって、-j フラグを使用するときは、これらのイベントをすべて Event リストに入れなければなりません。反対に、-k フラグを使用するときは、これらのイベントを Event リストに入れてはなりません。 SMIT または -J フラグを使用してトレースを開始する場合、これらのイベントは tidhk グループに入れられます。

-J Event-group [, Event-group ]  
-K Event-group [ ,Event-group ] イベント・グループを含める (-J) または除外する (-K) ように指定します。 -J フラグと -K フラグは、 -j フラグと -k のように機能します。ただし、対象は個別のフック ID ではなくイベント・グループです。 -j-J-k、および -K の 4 つのフラグ全部を指定できます。
-l trace デーモンを循環モードで実行します。トレース・データの収集が停止すると、trace デーモンはトレース・データをトレース・ログに書き込みます。トレース・データの最後のバッファーのみがキャプチャーされます。trcoff コマンドでトレース・データの収集を停止したときには、trcon コマンドを使って再開させます。
-L Size 1 MB のデフォルトのトレース・ログ・ファイルのサイズを指定された値に変更します。ファイル・サイズを 0 に指定すると、トレース・ログ・ファイルのサイズはデフォルトのサイズに設定されます。

注: 循環モードおよび代替モードでは、トレース・ログ・ファイルのサイズは少なくともトレース・バッファーのサイズの 2 倍でなければなりません。単一モードでは、トレース・ログ・ファイルのサイズは少なくともバッファーと同じサイズでなければなりません。トレース・バッファー・サイズの制御については、-T フラグを参照してください。
-m Message トレース・ログ・ヘッダー・レコードのメッセージ・フィールドに入れるテキストを指定します。
-n トレース・ログ・ヘッダーにロック情報、ハードウェア情報、および、ローダー・エントリーごとにシンボル名、アドレス、タイプなどの情報を追加します。
-o Name デフォルトの /var/adm/ras/trcfile トレース・ログ・ファイルをオーバーライドし、トレース・データをユーザー定義ファイルに書き込みます。
-o - デフォルトのトレース・ログ名をオーバーライドし、トレース・データを標準出力に書き出します。このフラグを使用すると、 -c フラグは無視されます。 -o - および -C が指定されている場合、エラーは無視されます。
-p 各フックに現在のプロセッサーの CPU ID を含めます。このフラグが有効なのは、 64 ビット・カーネルのトレースだけです。

注: trcrpt コマンドは、このオプションが指定されているかどうかに関係なく、 cpuid を報告できます。
-s トレース・ログがいっぱいになるとトレースを停止します。trace デーモンは通常、トレース・ログがいっぱいになるとそれを折り返し、トレース・データの収集を継続します。このフラグは、非同期での動作中は trace デーモンにトレース・データの収集を停止させます。(対話式での動作中は、quit サブコマンドを使ってトレース・データの収集を停止させなければなりません。)
-T Size

128 KB のデフォルトのトレース・バッファーのサイズを指定された値に変更します。 可能な最大サイズは 268435184 バイトです。ただし、 -f フラグが使用されている場合は 536870368 バイトです。可能な最小サイズは 8192 バイトです。ただし -f フラグが使用されている場合は、 16392 バイトです。 -f が使用されている場合でも、 8192 から 16392 の間のサイズを指定できますが、使用される実際のサイズは 16392 バイトになります。

注: 循環モードおよび代替モードでは、トレース・バッファーのサイズはトレース・ログ・ファイルのサイズの半分以下でなければなりません。単一モードでは、トレース・ログ・ファイルのサイズは少なくともバッファーと同じサイズでなければなりません。トレース・ログ・ファイル・サイズの制御については、 -L フラグを参照してください。また、トレース・バッファーはピン・メモリーを使用すること、すなわちページング可能ではないことにも注意してください。したがって、トレース・バッファーのサイズが大きいほど、物理メモリーがアプリケーションに使用できなくなります。

-b または -B フラグが指定されない限り、システムはバッファー・スペースをカーネル・ヒープから割り当てようとします。この要求が満たされない場合、システムはバッファーを個別のセグメントとして割り当てようとします。

-f フラグは、実際には 2 つのバッファーを使用しますが、それらは単一バッファーとして機能します (ただし、バッファー循環トレース・フックは最初のバッファーがいっぱいになったときに記録されます)。

サブコマンド

対話式に実行するとき、trace デーモンは以下のサブコマンドを認識します。

trcon トレース・データの収集を開始します。
trcoff トレース・データの収集を停止します。
q または quit トレース・データの収集を停止し trace デーモンを終了します。
!Command Command パラメーターで指定されたシェル・コマンドを実行します。
? trace デーモン・サブコマンドの要約を表示します。

シグナル

INTERRUPT シグナルはトグルとして動作し、トレース・データの収集を開始したり停止したりします。トレース対象のプロセスの割り込みは SIG_IGN に設定されます。

  1. trace を対話式に使用するには、trace と入力し、(> プロンプトが表示されてから) 必要なサブコマンドを入力します。たとえば、anycmd コマンドの実行中にシステム・イベントをトレースするには、以下のように入力します。

    trace
    > !anycmd
    > q
  2. コマンドの終了時に遅れが発生しないようにするには、コマンド行を 1 行だけ使って trace デーモンを非同期で始動します (-a フラグを指定)。以下のように入力します。

    trace -a; anycmd; trcstop
  3. システムそのものを 10 秒間トレースするには、以下のように入力します。

    trace -a; sleep 10; trcstop
  4. トレース・データを (デフォルトの /var/adm/ras/trcfile トレース・ログ・ファイルではなく) 特定のトレース・ログ・ファイルに出力するには、以下のように入力します。

    trace -a -o /tmp/my_trace_log; anycmd; trcstop
  5. 収集プロセスから特定のイベントを除外して、 cp コマンドの実行をキャプチャーするには、以下のように入力します。

    trace -a -k "20e,20f"; cp /bin/track /tmp/junk; trcstop

    上記の例では、 -k オプションは、 lockl 関数および unlockl 関数からのイベント (20e および 20f イベント) の収集を抑制します。

  6. フック 234 をトレースし、さらにプロセス名が分かるようにフックをトレースするには、以下を使用します。

    trace -a -j 234 -J tidhk
    これにより、イベント・グループ "tidhk" 内のフックおよびフック 234 がトレースされます。
  7. トレースで CPU ごとにバッファーのセットを 1 つ使用するには、以下を指定します。

    trace -aC all

    ファイルは /var/adm/ras/trcfile/var/adm/ras/trcfile-0/var/adm/ras/trcfile-1 などから /var/adm/ras/trcfile-(n-1) まで作成されます。ここで、n はシステム内の CPU の数です。

    注:
    trace -aCall -o mylog では、ファイル mylog、mylog-0、mylog-1 などが作成されます。

関連情報