trace デーモン

目的

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

構文

トレース -a 値  ] ] [  「-f」  ] [ 「-c」] [ -C [ CPU リスト | すべて ]] [  -d 年 ] [ -e ストリング・コマンド ] -h ] [ -j (J) EventList ] [ -k (K)  EventgroupList ] [ -J EventgroupList ] [ -K (K) EventgroupList ] [  -m (M) メッセージ ]  [ -M (M) ] [ -N (N) ] [  ] [  - 名前 ] [  -o- ] [  P- ] [ -r RegList ] [  -s ] [ -A ProcessIDList ] [ T ThreadIDList ] [ -x (X) プログラム仕様 | -X (X) プログラム仕様 ] [ -I (I) ] [ -P トレース伝搬 ][  -L (L) サイズ ] [  -T (T) サイズ ] [ -W (W) ] [ -@ WparList ]

説明

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

-a-x、または -X フラグを指定して呼び出されると、 トレース・デーモンは非同期で実行されます (例えば、バックグラウンド・タスクとして)。 それ以外の場合は、対話式に実行され、 サブコマンドの入力を求めるプロンプトが出されます。

WPAR構成済み ID (CID) をトレース・フックに入れるには、 -W フラグを使用します。

特定の WPARをトレースするには、 -@ フラグを使用して、トレースする WPAR 名のリストを指定します。

trace デーモンを実行するのに System Management Interface Tool (SMIT) を使用することができます。 SMIT を使用するには、以下のように入力します。

smit trace

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

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

選択したプロセスまたはスレッドのみをトレースするように決めることができます。 単一のプログラムをトレースすることもできます。 新しく作成されたプロセスまたはスレッドにトレースを伝搬または拡張するか指定できます。 チャネル 0 がアクティブな場合は、オプションで、そのようなトレースに割り込みイベントを含めることができます。

注:
  1. トレース対象のプロセスより先にトレースが開始されていないと、プロセス起動イベントはキャプチャーされません。 トレース対象のプロセスより先にトレースが開始されていると、トレース対象のプロセス以外のプロセスの一部のイベントもキャプチャーされます。
  2. トレースがカーネル・ヒープからのメモリーを使用する場合、このメモリーは、システムの次のリブートまでカーネル・メモリーに含まれたままになります。 したがって、大きいバッファーを使用する場合は注意が必要です。

フラグ

項目 説明
-@ WparList WparList パラメーターで指定した ワークロード区画 をトレースします。 複数の WPAR 名は、コンマで区切るか、引用符で囲んでスペースで区切ることができます。 現在のグローバル・システムをトレースに組み込む場合は、グローバルを指定します。 -@ フラグは、 ワークロード・パーティション 環境のグローバル・システムでのみ指定できます。
-a trace デーモンを非同期で (すなわち、バックグラウンド・タスクとして) 実行します。 この方法でいったん trace を開始すれば、trcontrcoff、および trcstop コマンドを使用して、個々にトレースの開始/停止をしたり、トレース・セッションを終了したりすることができます。 この 3 つのコマンドは、trace へのリンクとしてインプリメントされています。
-A ProcessIDList プロセス、およびオプションで、ProcessIDList で指定されたその子のみをトレースします。 プロセス ID は 10 進数です。 複数のプロセス ID を、コンマで区切ることも、引用符で囲んでスペースで区切ることもできます。 -A フラグはトレース・チャネル 0 の場合にのみ有効です。-A フラグと -g フラグは両立しません。

トレースの開始時に指定のプロセスに存在しているすべてのスレッドがトレースされます。 トレースの開始後に、トレース中のプロセスが追加のスレッドまたはプロセスを作成した場合、デフォルトでは、それらのスレッドまたはプロセスは -P フラグを指定しない限りトレースされません。

-c トレース・ログ・ファイルを、その名前に .old を追加して保存します。
-C [ CPUList | すべて ] CPUList 内のプロセッサーごとに、 バッファーのセットを 1 つ使用してトレースします。 プロセッサーはコンマで区切るか、 または二重引用符で囲んでからコンマやブランクで区切ることができます。 すべてのプロセッサーをトレースするには、 all を指定します。 このフラグはプロセッサーごとにバッファーのセットを 1 つ使用してトレースし、 プロセッサーごとにファイルを 1 つ作成するので、 メモリーおよびファイル・スペースを大量に消費する場合があります。 そのため、注意して使用しなければなりません。 作成されるファイルには、trcfiletrcfile-0trcfile-1 などの名前が付けられます。 ここで、01 などはプロセッサー番号です。 -T または -L が指定されている場合、 サイズはバッファーの各セットおよび各ファイルに適用されます。 ユニプロセッサー・システムでは、次のように指定できます。-C all、ただし-Cプロセッサー番号のリストは無視されます。
注意 -Cフラグはrootユーザーのみが使用できる。
-d トレース・データ収集の自動開始を使用不可にします。 トレース・データ収集の開始を遅らせます。 trace デーモンを発行すると、トレース・データの収集は通常自動的に開始されます。 トレース・データの収集を開始するには、 trcon サブコマンドを使用します。
-e string-cmd トレースを開始する前に、引数として string-cmd を指定して ctctrl を実行することにより、コンポーネント・トレースを構成します。 つまり、 ctctrl string-cmdを実行します。 複数の -e オプションを渡すことができます。これは、引数の各 string-cmd を指定して ctctrl コマンドを連続して実行することと同等です。 このオプションを使用して、システム・トレースの開始直前にいくつかのコンポーネントにシステム・トレース・モードを構成できます (システム・トレース・モードを On に設定し、トレースのレベルを変更する、等々により)。
-f trace デーモンを単一モードで実行します。 メモリー内トレース・バッファーがいっぱいになると、トレース・データの収集はすぐに停止します。 次にトレース・データがトレース・ログに書き込まれます。 トレース・データの収集を再開して、バッファーいっぱいのデータをキャプチャーするには、trcon サブコマンドを使います。 バッファーがいっぱいになる前に trcoff サブコマンドを実行すると、トレース・データの収集は停止し、現在バッファーに入っている内容がトレース・ログに書き込まれます。
-g トレース・セッションを汎用トレース・チャネル上 (チャネル 1 から 7) で始動します。 このフラグは、trace が非同期で実行されるとき (-a フラグを指定したとき) のみ動作します。 コマンドの戻りコードはチャネル番号です。チャネル番号は汎用トレース・コール・サブルーチンで引き続き使用しなければなりません。 汎用トレース・セッションを停止するには、コマンド trcstop -<channel_number> を使用します。
-h ヘッダー・レコードをトレース・ログに書き込まないようにします。 通常、trace デーモンはトレース・ログの最初にヘッダー・レコードを書き込みますが、ヘッダー・レコードには以下のような項目が含まれます。つまり、日付と時刻 (date コマンドから)、システム名、バージョンとリリース番号、ノード識別番号、コンピューター識別番号 (uname -a コマンドから)、ユーザー定義メッセージなどです。 trcrpt コマンド出力のトレース・ログの先頭に、ヘッダー・レコードの情報が書き込まれます。
-I トレース割り込みイベント。 -A または -t と共に指定すると、-I フラグは、割り込みイベントのほかに、指定されたプロセスまたはスレッドに関するイベントをトレースに含めます。 -I を指定して、-A-t も指定しない場合は、割り込みレベルのイベントのみがトレースされます。 -I フラグはトレース・チャネル 0 の場合にのみ有効です。-I フラグと -g フラグは両立しません。
-j EventList ユーザー定義のイベントを指定して、トレース・データを収集します。 EventList パラメーターで指定されたリスト項目は、コンマで区切ることも、引用符で囲んでコンマまたはスペースで区切ることもできます。 AIX® 6.1およびそれ以前のリリースでは、hh形式で2桁のフックIDを指定すると、hh00、hh10,...,hhF0が指定される。 3 桁のフック ID を hhh の形式で指定すると、hhh0 と指定されます。 4 桁のフック ID を hhhh の形式で指定すると、hhhh と指定されます。

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

-J EventgroupList 組み込むイベント・グループを指定します。 EventgroupList パラメーターで指定されたリスト項目は、コンマで区切ることも、引用符で囲んでコンマまたはスペースで区切ることもできます。 -J および -K フラグは、 -j および -k のように機能します。 ただし、対象はフック ID ではなくイベント・グループです。 コマンド内では、-j-J-k、および -K の各フラグを指定できます。
-k EventgroupList ユーザー定義のイベントを指定して、トレース・データを除外します。 EventgroupList パラメーターで指定されたリスト項目は、コンマで区切ることも、引用符で囲んでコンマまたはスペースで区切ることもできます。 AIX 6.1 以前のリリースでは、 hh の形式で 2 桁のフック ID を指定すると、 hh00, hh10,...,hhF0が指定されます。 3 桁のフック ID を hhh の形式で指定すると、hhh0 と指定されます。 4 桁のフック ID を hhhh の形式で指定すると、hhhh と指定されます。
ヒント: trcrpt レポート内の pidcpuid、および exec パス名を判別するには、以下のイベントを使用します。
106 DISPATCH
10C DISPATCH IDLE PROCESS
134 EXEC SYSTEM CALL
139 FORK SYSTEM CALL
465 KTHREAD CREATE

これらのイベントのいずれかが除外されると、trcrpt コマンドが報告する情報は不完全なものになります。 -k フラグを使用するときは、これらのイベントを EventgroupList パラメーターに組み込まないでください。 SMIT または -J フラグを使用してトレースを開始する場合、 これらのイベントは tidhk グループに入れられます。

-K EventgroupList 除外するイベント・グループを指定します。 EventgroupList パラメーターで指定されたリスト項目は、コンマで区切ることも、引用符で囲んでコンマまたはスペースで区切ることもできます。 -J および -K フラグは、 -j および -k のように機能します。 ただし、対象はフック ID ではなくイベント・グループです。 コマンド内では、-j-J-k、および -K の各フラグを指定できます。
-l trace デーモンを循環モードで実行します。 トレース・データの収集が停止すると、trace デーモンはトレース・データをトレース・ログに書き込みます。 トレース・データの最後のバッファーのみがキャプチャーされます。 trcoff コマンドでトレース・データの収集を停止したときには、trcon コマンドを使って再開させます。
-L サイズ 1 MB のデフォルト・トレース・ログ・ファイル・サイズを、指定された値でオーバーライドします。 ゼロのファイル・サイズを指定すると、トレース・ログ・ファイル・サイズはデフォルト・サイズに設定されます。

注: 循環モードおよび代替モードでは、トレース・ログ・ファイルのサイズは少なくともトレース・バッファーのサイズの 2 倍でなければなりません。 単一モードでは、トレース・ログ・ファイルのサイズは少なくともバッファーと同じサイズでなければなりません。 トレース・バッファー・サイズの制御については、-T フラグを参照してください。

-m メッセージ トレース・ログ・ヘッダー・レコードのメッセージ・フィールドに入れるテキストを指定します。
-M 実行プロセスのアドレス・マップをトレース内にダンプします。 トレース・ファイルが tprof コマンドによって処理される場合は、 -M フラグを指定する必要があります。
-n トレース・ログ・ヘッダーにロック情報、ハードウェア情報、および、ローダー・エントリーごとにシンボル名、アドレス、タイプなどの情報を追加します。
-N 指定されたプロセスのアドレス・マップをトレース内にダンプします。 -N オプションは、-M オプションと一緒に使用されます。
-o 名前 デフォルトの /var/adm/ras/trcfile トレース・ログ・ファイルをオーバーライドし、トレース・データをユーザー定義ファイルに書き込みます。
-o - デフォルトのトレース・ログ名をオーバーライドし、トレース・データを標準出力に書き出します。 このフラグを使用すると、 -c フラグは無視されます。 -o - および -C が指定されている場合、 エラーは無視されます。
-p 各フックに現在のプロセッサーの cpuid を含めます。 このフラグが有効なのは、 64 ビット・カーネルのトレースだけです。

注: trcrpt コマンドは、このオプションが指定されているかどうかに関係なく、cpuid を報告できます。

-P 伝搬 propagation には、プロセス作成後の伝搬を文字 p で指定し、スレッド作成後の伝搬を t で指定し、伝搬なしを n で指定します。 プロセス作成後の伝搬ではスレッド作成後の伝搬が暗黙指定されます。 例えば、あるプロセスをトレースするために -A を指定した場合、トレースの開始時にこのプロセスについて存在していたすべてのスレッドがトレースされます。 -Pt フラグを指定すると、そのプロセスによって以後に作成されたすべてのスレッドもトレースされます。 -Pp を指定すると、そのプロセスによって以後に作成されたすべてのプロセスおよびスレッドがトレースされます。 すべてのスレッドをトレースするために -t all を指定した場合は、-P は無視されます。 -P フラグはトレース・チャネル 0 の場合にのみ有効です。-P フラグと -g フラグは両立しません。
-r レジュリスト オプションで、64 ビット・カーネルで実行される trace にのみ有効です。 reglist 項目はコンマで区切るか、あるいは引用符で囲んでからブランクで区切ります。 最大 8 つのレジスターを指定できます。 有効な reglist 値は次のとおりです。
PURR - The PURR
このプロセッサー用のレジスター
SPURR
このプロセッサー用の SPURR レジスター
MCR0、MCR1、MCRA - the MCR
レジスター 0、1、および A
PMC1, PMC2, ... PMC8 - PMC
レジスター 1 から 8 まで

-r フラグを指定すると、trace コマンドは指定されたレジスター値をヘッダーにダンプします。

制約事項: すべてのレジスターがすべてのプロセッサーに対して有効であるわけではありません。
-s トレース・ログがいっぱいになるとトレースを停止します。 trace デーモンは通常、トレース・ログがいっぱいになるとそれを折り返し、トレース・データの収集を継続します。 このフラグは、非同期での動作中は trace デーモンにトレース・データの収集を停止させます。 (対話式での動作中は、quit サブコマンドを使ってトレース・データの収集を停止させなければなりません。)
-t ThreadIDList ThreadIDList パラメーターによって指定されたスレッドのみをトレースします。 スレッド ID は 10 進数です。 複数のスレッド ID を、コンマで区切ることも、引用符で囲んでスペースで区切ることもできます。

また、スレッド・リストを all または * にして、すべてのスレッドをトレースすることを指示することもできます。 これは、割り込み関連イベントをトレースせずにすべてのスレッド関連イベントをトレースするのに便利です。 ただし、-t all-I の両方を指定すると、どちらも指定しないのと同じになります。つまり、すべてのイベントがトレースされます。 言い換えれば、tracetrace -It all は等しい結果になります。

-t フラグはトレース・チャネル 0 の場合にのみ有効です。-t フラグと -g フラグは両立しません。

-T サイズ

デフォルトのトレース・バッファー・サイズ 128 KB を指定された値にオーバーライドします。 1MB を超えるバッファー・スペースを要求するためには、root でなければなりません。 可能な最大サイズは 268435184 バイトです。 ただし、 -f フラグが使用されている場合は 536870368 バイトです。 可能な最小サイズは 8192 バイトです。ただし -f フラグを使用している場合は、16392 バイトです。 -f が使用されている場合でも、 8192 から 16392 の間のサイズを指定できますが、 使用される実際のサイズは 16392 バイトになります。

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

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

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

-W -W フラグを使用して、現行プロセスの ワークロード・パーティション構成済み ID (CID) を各フックに組み込みます。 このフラグは、 ワークロード・パーティション 環境のグローバル・システムでのみ有効です。
ヒント: trcrpt コマンドは、このオプションが指定されているかどうかに関係なく、 ワークロード・パーティションCID を報告できます。
-x program-specification 指定されたプログラムをトレースします。 program-specification は、1 つのプログラムと、そのプログラムをシェルから実行する場合のパラメーターに相当するものを指定します。ただし、プログラムの名前以外のものも指定するプログラム仕様は、引用符で囲まなければなりません。 プログラムが終了すると、トレースは自動的に停止し、プログラムの戻りコードを戻します。 デフォルトでは、プログラムにより作成されたプロセスおよびスレッドもすべてトレースされます。-Pp を指定した場合と同じになります。 この動作を変更するには、-Pn を使用して、トレース伝搬なしを指定するか、あるいは -Pt を使用して、プログラムの元のプロセスが作成したスレッドにのみトレースを伝搬することを指定します。
ヒント: -x フラグは、 -a フラグも指定されたかのように、非同期トレースを暗黙指定します。
-X program-specification -X フラグは -x フラグとよく似ていますが、プログラムが終了してもトレースは自動的に停止しないという違いがあります。 これは、プロセスを fork した後で終了するプログラムをトレースするとき、それらの新しいプロセスもトレースしたい場合に便利です。

サブコマンド

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

項目 説明
trcon トレース・データの収集を開始します。
trcoff トレース・データの収集を停止します。
q または quit [-serial | -dd] トレース・データの収集を停止し trace デーモンを終了します。 -s オプションが指定されている場合、これによって保留中のすべての入出力操作が直列化されます。 -d オプションが指定されている場合は、保留中の入出力操作はすべて破棄されます。
! Command Command パラメーターで指定されたシェル・コマンドを実行します。
? trace デーモン・サブコマンドの要約を表示します。

シグナル

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

セキュリティー

RBACユーザーおよびTrustedAIXユーザーに注意:このコマンドは特権操作を実行できます。 特権命令を実行できるのは特権ユーザーのみです。 権限と特権の詳細については、セキュリティの特権コマンドデータベースを参照してください。 このコマンドに関連した特権および権限のリストについては、lssecattr コマンドまたは getcmdattr サブコマンドの項を参照してください。
trace コマンドをチャネル 0 で実行するためには、チャネル 0 trace 制限が trcctl コマンドで有効になっている場合、以下の追加の権限が必要です。
項目 説明
aix.ras.trace.tracech0 trace コマンドをチャネル 0 で実行する場合に必要です。
注: デフォルトでは、root ユーザーとシステム・グループ・ユーザーは特権ユーザーです。
すべてのコマンド (trace コマンドなど) のすべての機能をチャネル 0 で実行するためには、以下の追加の権限が必要です。
項目 説明
aix.ras.trace.trace すべてのトレース操作を実行する場合に必要です。

  1. トレースを対話式に使用するには, 次のように入力してtrace, (>プロンプトが表示されます)。次に、必要な サブコマンド を指定します。 例えば、anycmd コマンドの実行中にシステム・イベントをトレースするには、以下のように入力します。
    trace
    > !anycmd
    > q
  2. コマンドの終了時の遅延を回避するには、コマンド行を 1 つだけ使用して、トレースを非同期に開始します ( -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" -x "cp /bin/track /tmp/junk"

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

    また、-x フラグが使用されていることに注意してください。この場合、cp コマンド・プロセスに関連したフックのみがトレースされ、割り込みアクティビティーはトレースされません。

  6. フック 234 をトレースし、 さらにプロセス名が分かるようにフックをトレースするには、 以下を使用します。
    trace -a -j 234 -J tidhk
    これにより、 イベント・グループ "tidhk" 内のフックおよびフック 234 がトレースされます。
  7. トレースでプロセッサーごとにバッファーのセットを 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 はシステム内のプロセッサーの数です。
    ヒント: trace -aCall -o mylogは、ファイル mylog、 mylog-0、 mylog-1、... を生成します。
  8. デーモン・プロセスを開始するプログラムをトレースし、元のプログラムの終了後もデーモンのトレースを継続するには、以下を使用します。
    trace -X "mydaemon"
    トレースを停止するには、trcstop を使用する必要があります。
  9. 現在実行中の mydaemon をトレースするには、以下を使用します。
    trace -A mydaemon-process-id -Pp
    ここで、mydaemon-process-id は、ps コマンドによって戻される mydaemon のプロセスです。 -Pp フラグは、トレースの実行中に mydaemon により作成されたプロセスおよびスレッドもすべて実行するように、trace に指示します。
  10. PURR、PMC1、および PMC2 をキャプチャーするには、次のように入力します。
    trace -ar "PURR PMC1 PMC2"
  11. トレース・フック 1A00,1A10,...,1AF0、DCA0 および 1AB1 をトレースするには、次のように入力します。
    trace -aj 1A,DCA,1AB1 

ファイル

項目 説明
/usr/include/sys/trcmacros.h trchook マクロと utrchook マクロを定義します。
/var/adm/ras/trcfile デフォルトのトレース・ログ・ファイルが入っています。