trace デーモン

目的

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

構文

trace -a  -g ] ] [  -f  -l ] [ -b |  -B] [ -c] [ -C [ CPUList | all ]] [  -d ] [ -e string-cmd ] -h ] [ -j EventList ] [ -k  EventgroupList ] [ -J EventgroupList ] [ -K EventgroupList ] [  -m Message ]  [ -M ] [ -N ] [  -n ] [  -o Name ] [  -o- ] [  -p ] [ -r reglist ] [  -s ] [ -A ProcessIDList ] [ -t ThreadIDList ] [ -x program-specification | -X program-specification ] [ -I ] [ -P trace-propagation ][  -L Size ] [  -T Size ] [ -W ] [ -@ WparList ]

説明

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

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

WPAR の構成済み ID (CID) をトレース・フックに書き込む場合は、-W フラグを使用します。

固有の WPAR をトレースする場合は、トレースする WPAR 名のリストとともに -@ フラグを使用します。

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


smit trace

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

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

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

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

フラグ

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

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

-b バッファーをカーネル・ヒープから割り当てます。要求されたバッファー・スペースがカーネル・ヒープから入手できない場合、コマンドは失敗します。
制限: -b フラグは、32 ビットのカーネルを使う場合にのみ有効です。
-B バッファーを個別のセグメントに割り当てます。
制限: -B フラグは、32 ビットのカーネルを使う場合にのみ有効です。
-c トレース・ログ・ファイルを、その名前に .old を追加して保存します。
-C [ CPUList | all ] 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 およびそれ以前のリリースでは、2 桁のフック ID を hh の形式で指定すると、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 およびそれ以前のリリースでは、2 桁のフック ID を hh の形式で指定すると、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 Size 1 MB のデフォルト・トレース・ログ・ファイル・サイズを、指定された値でオーバーライドします。ゼロのファイル・サイズを指定すると、トレース・ログ・ファイル・サイズはデフォルト・サイズに設定されます。

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

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

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

-P propagation propagation には、プロセス作成後の伝搬を文字 p で指定し、スレッド作成後の伝搬を t で指定し、伝搬なしを n で指定します。 プロセス作成後の伝搬ではスレッド作成後の伝搬が暗黙指定されます。 例えば、あるプロセスをトレースするために -A を指定した場合、トレースの開始時にこのプロセスについて存在していたすべてのスレッドがトレースされます。 -Pt フラグを指定すると、そのプロセスによって以後に作成されたすべてのスレッドもトレースされます。 -Pp を指定すると、そのプロセスによって以後に作成されたすべてのプロセスおよびスレッドがトレースされます。 すべてのスレッドをトレースするために -t all を指定した場合は、-P は無視されます。 -P フラグはトレース・チャネル 0 の場合にのみ有効です。-P フラグと -g フラグは両立しません。
-r reglist オプションであり、64 ビット・カーネルでの trace 実行でのみ有効です。 reglist 項目はコンマで区切るか、あるいは引用符で囲んでからブランクで区切ります。最大 8 つのレジスターを指定できます。 有効な reglist 値は次のとおりです。
PURR - The PURR
このプロセッサー用のレジスター
SPURR
このプロセッサー用の SPURR レジスター
MCR0、MCR1、MCRA - the MCR
レジスター 0、1、および A
PMC1, PMC2, ... PMC8 - PMC
レジスター 1 から 8 まで
制限: すべてのレジスターがすべてのプロセッサーで有効であるとは限りません。
-s トレース・ログがいっぱいになるとトレースを停止します。trace デーモンは通常、トレース・ログがいっぱいになるとそれを折り返し、トレース・データの収集を継続します。このフラグは、非同期での動作中は trace デーモンにトレース・データの収集を停止させます。(対話式での動作中は、quit サブコマンドを使ってトレース・データの収集を停止させなければなりません。)
-t ThreadIDList ThreadIDList パラメーターによって指定されたスレッドのみをトレースします。 スレッド ID は 10 進数です。 複数のスレッド ID を、コンマで区切ることも、引用符で囲んでスペースで区切ることもできます。

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

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

-T Size

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

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

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

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

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

サブコマンド

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

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

シグナル

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

セキュリティー

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

  1. trace デーモンを対話式に使用するには、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 デフォルトのトレース・ログ・ファイルが入っています。