filemon [ -d ] [ -i Trace_File -n Gennames_File] [ -o File] [ -O Levels] [ -P ] [ -T n] [ -u ] [ -v ]
filemon コマンドでは、ファイルシステムと入出力システム・イベントのトレースがモニターされ、その期間のファイルと入出力アクセスのパフォーマンスについて報告されます。
通常モードでは、filemon コマンドはバックグラウンドで実行され、1 つまたは複数のアプリケーション・プログラムまたはシステム・コマンドを実行し、モニターします。 filemon コマンドは自動的に始動され、プログラムのファイルシステムと入出力イベントのトレースをリアルタイムでモニターします。デフォルトでは、トレースは即座に開始されます。オプションでユーザーが trcon コマンドを発行してからトレースを開始するようにも設定できます。ユーザーは filemon コマンドの実行中にtrcoff コマンドと trcon コマンドを実行して、モニターを必要に応じてオフまたはオンにできます。トレースが trcstop コマンドによって停止されると、filemon コマンドは I/O アクティビティー・レポートを生成して、終了します。
また、filemon コマンドでは、トレース機能によって以前に記録されたトレース・ファイルを処理することもできます。ファイルと入出力アクティビティーの報告は、そのファイルに記録されているイベントに基づきます。
アプリケーションのファイルシステムのパフォーマンスについてより詳細な情報を提供するために、filemon コマンドでは次の 4 つのレベルでファイルと入出力アクティビティーをモニターします。
コマンド行フラグで指定したとおりに、この 4 つのレベルを任意に組み合わせてモニターできます。デフォルトでは、filemon コマンドによって、仮想記憶、論理ボリューム、物理ボリュームのレベルでの入出力操作だけがモニターされます。これらのレベルはすべて、実際のディスク入出力に対する要求に関連するものです。
filemon コマンドにより、その報告が標準出力または指定ファイルに書かれます。報告は、モニターしている各レベルの入出力アクティビティーの要約で始まり、モニターしている各レベルの入出力アクティビティー統計の詳細で終わります。要約と詳細報告の内容については、報告のセクションで説明します。
-u フラグは、trace デーモンの始動前にオープンされたファイルに関するレポートを生成する場合に使用されます。このデータには役に立つものもありますが、そのほとんどはデーモンやほかの無関係のアクティビティーに該当します。このバックグラウンド情報は、大きなシステムの場合、特に多くなります。 /unix ファイルと実行中のカーネルが同じでない場合、カーネル・アドレスが正しくないので、filemon コマンドは終了します。filemon コマンドをシェル・スクリプト内から使用する場合、 filemon コマンドの出力ファイルの内容を表示するまでに、少し遅延が発生することを考慮してください。filemon コマンドでこのレポートを作成するのに、数秒かかることがあります。
filemon コマンドでは、システム・トレース機能を使って、未加工の入出力パフォーマンス・データを獲得します。現在、トレース機能では 1 つの出力ストリームしかサポートしていません。したがって、filemon またはトレース・プロセスは 1 つずつ実行されます。別の filemon またはトレース・プロセスがすでに実行中の場合、filemon コマンドは次のようなメッセージで応答します。
/dev/systrace: Device busy
極度に入出力が集中するアプリケーションをモニターする場合、filemon コマンドでは、トレース・イベントをリアルタイムに (トレース・イベントが生成されるのと同じ速さで) 処理できないことがあります。この場合は、次のようなエラー・メッセージが表示されます。
Trace kernel buffers overflowed, N missed entries
このメッセージは stderr に表示されて、トレース・バッファーがいっぱいになったときに失われたトレース・イベントの数が示されます。filemon コマンドでは、入出力アクティビティーのモニターが継続されますが、報告の正確性はある程度失われます。オーバーフローを避ける 1 つの方法として、ファイルと入出力サブシステムをモニターするレベルを少なくする方法があります。生成されるトレース・イベントの数は、モニターするレベルの数に比例するためです。さらに、-T オプションを使ってトレース・バッファー・サイズを増やし、オーバーフローが発生する前にトレース・イベントのバーストを調整する方法もあります。ただし、トレース・バッファー・サイズを増やすことは、固定されたメモリーが増えるので、入出力やページングの動作に影響を及ぼすことがあるので注意してください。
メモリー制約のある (必要なメモリーが足りない) 環境では、-P オプションを使用すると、リアルタイムの filemon プロセスのテキストとデータ・ページをメモリーに固定できるので、ページがスワップアウトされません。 -P オプションを使用しないと、filemon プロセスがスワップアウトされるので、filemon コマンドの進行が遅れ、十分な速度でトレース・イベントを処理できないことがあります。このような状況が発生すると、トレース・バッファーは上記のようにオーバーフローしてしまいます。当然、このプロセスを固定すると、アプリケーションのメモリーは減少します (filemon コマンドは大きなプログラムではありませんが、そのプロセス・イメージによって使用されるメモリーは最大 500 KB になります)。
filemon コマンドを使って既存のトレース・データ・ファイルを処理する前に、trcrpt コマンドの -r オプションを使用して実行し、トレース・データを順番に新しいファイルに再度書き込む必要があります。この処理を行わないと、filemon コマンドによって次のエラー・メッセージが表示され、コマンドは終了します。
error: run 'trcrpt -r' on logfile first
-i Trace_File フラグ、および -n Gennames_File フラグを指定すると、 trace コマンドで作成されたトレース・データ・ファイルを filemon コマンドによってオフライン処理することができます。これらのフラグのいずれか一方が存在している場合には、もう一方も指定しなければなりません。これらのフラグは、リモート・マシンからトレース・ファイルのポストプロセスをする場合や、ある時点でトレース・データ収集を実行し、別の時点でそのポストプロセスをする場合に役に立ちます。システム負荷が大きく、filemon がトレース・フックを見逃している場合にも、これらのフラグは役に立ちます。
gennames ファイル (ファイルシステム情報が含まれています) は、トレース元のマシンから使用する必要があります。また、システム・トレース・ファイルが作成されるのとほぼ同時に、 gennames を実行して、両者のシステム構成が同じになるようにするのも賢明な方法です。
filemon に関係のあるトレース・フックは、trace コマンドにより収集され、trace -j フラグで指定されます。関係のあるトレース・フックが表示されるのは、-v フラグを使用して filemon を起動した場合です。次に -f オプションを指定した gennames コマンドが実行され、出力が Gennames_File に保管されて、filemon の追加情報を収集します。gennames コマンドに -f オプションを指定すると、物理ボリュームおよび論理ボリュームに関するデバイス情報が収集されます。このオプションは、オフラインの filemon によって使用される仮想ファイルシステム情報を収集する場合にも使用されます。 trace コマンドを実行した後、トレース・ログ・ファイルに trcrpt -r を実行し、別のファイルにリダイレクトする必要があります。その後、このファイルと Gennames_File は、 filemon に提供されることもあります。
filemon コマンドによって生成される各報告には、日付、マシン ID、モニター期間 (秒) を示すヘッダーがあります。また、モニター期間中の CPU 使用率も報告されます。
次に、モニターする各ファイルシステム・レベルごとに要約報告が生成されます。デフォルトでは、論理ファイルと仮想記憶についての報告は、転送されたデータの総量を調べて最もアクティブであった 20 個のファイルとセグメントにそれぞれ制限されます。 -v フラグを指定すると、すべてのファイルとセグメントについてのアクティビティーが報告されます。各ファイル、セグメント、ボリュームについて、それぞれ 1 行に報告されます。 4 つの要約報告の各行の列を、次のリストで説明します。
列 | 説明 |
#MBS | セグメントとの間で転送されたデータの合計量 (MB 単位)。このフィールドに従って、行は降順にソートされます。 |
#rpgs | ディスクからセグメントに読み取られた (つまり、ページインされた) 4096 バイト単位のページ数。 |
#wpgs | セグメントからディスクに書き込まれた (ページアウトされた) 4096 バイト単位のページ数。 |
segid | セグメントの内部 ID。 |
segtype | セグメントのタイプ: 作業セグメント、永続セグメント (ローカル・ファイル)、クライアント・セグメント (リモート・ファイル)、ページ・テーブル・セグメント、システム・セグメント、ファイルシステムのデータが入っている特殊永続セグメント (ログ、ルート・ディレクトリー、 .inode、.inodemap、.inodex、.inodexmap、.indirect、.diskmap) のいずれか。 |
volume:inode | 永続セグメントの場合、関連するファイルを持つボリューム名とそのファイルの i ノード番号。このフィールドは、永続セグメントをファイル入出力報告で表示される永続セグメントに対応するファイルに関連付けるために、使用します。永続セグメントでない場合、このフィールドはブランクになります。
注:
仮想メモリー分析ツール svmon を使用すると、セグメント ID (segid) を次のように指定して、セグメントに関する詳細を表示できます。
svmon -S <segid> |
最後に、モニターしている各ファイルシステム・レベルごとに詳細報告が生成されます。デフォルトでは、論理ファイルと仮想記憶についての報告は、転送されたデータの総量を調べて最もアクティブであった 20 個のファイルとセグメントにそれぞれ制限されます。 -v フラグを指定すると、すべてのファイルとセグメントについてのアクティビティーが報告されます。各ファイル、セグメント、またはボリュームについて、それぞれ 1 つのエントリーに報告されます。
フィールドのなかには、1 つの値が報告されるものと、たくさんの値の分布を示す統計が報告されるものがあります。たとえば、応答時間統計には、モニターされた読み取りまたは書き込みの要求すべてについての統計が保持されます。また、平均、最小、最大の応答時間に加え、応答時間の標準偏差も報告されます。標準偏差は、個別の応答時間が平均からかけ離れている度合いを示すために使用されます。抽出した応答時間の約 2/3 が average - standard deviation と average + standard deviation の間にあります。応答時間の分布が広範囲に広がると、標準偏差は平均応答時間と比較して大きくなります。 4 つの明細報告を、次のリストで説明します。
-i Trace_File | リアルタイム・トレース・プロセスからではなく、指定した Trace_File から入出力トレース・データを読み取ります。filemon 報告では、トレース・ファイルに表されたシステムと期間についての入出力アクティビティーが要約されます。
注:
通常、トレース・データ・ファイルは循環方式で書き込まれます。トレース・データが折り返された場合、ファイルの途中に、トレースの始めと終わりがくる場合があります。
filemon コマンドを起動する前に、次のように trcrpt コマンドのロウ・モードを使って、データを順次的に書き換えてください。
trcrpt -r file > new.file 報告の正確性を高めるために、トレース・ファイルには、filemon コマンドに必要なすべてのフックが入っている必要があります。 -n オプションも指定しなければなりません。 |
-n Gennames_File | オフライン・トレース処理のために Gennames_File を指定します。このファイルは、次のように、-f オプションを指定して gennames コマンドを実行し、出力をファイルにリダイレクトすると作成されます。
gennames -f > file -i オプションも指定しなければなりません。 |
-o File | stdout ファイルにではなく、指定した File に入出力アクティビティーの報告を書き込みます。 |
-d | filemon コマンドを始動しますが、ユーザーが trcon コマンドを実行するまでトレースを開始しません。デフォルトでは、トレースは即時に開始されます。 |
-T n | カーネルのトレース・バッファー・サイズを n バイトに設定します。デフォルト・サイズは 32 000 バイトです。必要であれば、バッファー・サイズを増やして、イベントのバーストを調整できます。(典型的なイベント・レコード・サイズは 30 バイトです。)
注:
カーネル内のトレース・ドライバーではダブル・バッファリングが使用されます。したがって、実際には、サイズ n バイトには 2 つのバッファーが割り当てられます。また、これらのバッファーはメモリーに固定されているので、ページングの対象にはなりません。バッファーを大きくすると、ページングやほかの入出力のパフォーマンスに影響を及ぼす場合があります。 |
-P | モニター・プロセスをメモリーに固定します。 -P フラグを指定すると、モニター期間中、filemon コマンドのテキストとデータ・ページがメモリーに固定されます。このフラグは、メモリー制約のある環境で実行するときに、リアルタイム filemon プロセスがページアウトされないようにするためのものです。 |
-v | エクストラ情報を報告に出力します。 -v フラグの最も重要な機能は、最もアクティブな論理ファイルとセグメントが最大 20 までという制限がなく、アクセスされたすべての論理ファイルとセグメントが入出力アクティビティーの報告に含まれることです。 |
-O Levels | 指定したファイルシステム・レベルだけをモニターします。次のレベル ID が有効です。 デフォルトでは、vm、lv、pv の各レベルがモニターされます。 |
-u | trace デーモンの始動前にオープンされたファイルについて報告します。ファイル名の代わりに、プロセス ID (PID) とファイル・ディスクリプター (FD) が使用されます。
注:
PID と FD は再使用可能なので、異なるファイルが同じ名前フィールドで報告される場合があります。 |
filemon
filemon コマンドによって自動的にシステム・トレースが開始され、コマンド自体はバックグラウンドに入ります。このコマンドの後に、この時点で実行するアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力します。
trcstop
trcstop コマンドを実行した後、入出力アクティビティー・レポートが標準出力に表示されます (ただし、画面がスクロールされて全体が表示されない場合もあります)。仮想記憶の入出力の報告は、多くの入出力が関連する 20 個のセグメントに制限されます。
filemon -o fmon.out -O all
filemon コマンドによって自動的にシステム・トレースが開始され、コマンド自体はバックグラウンドに入ります。このコマンドの後に、この時点で実行するアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力します。
trcstop
trcstop コマンドを実行すると、入出力アクティビティーの報告が fmon.out ファイルに書き込まれます。ファイルと入出力システムの 4 つのレベルすべて (論理ファイル、仮想記憶、論理ボリューム、物理ボリュームのすべてのレベル) がモニターされます。論理ファイルと仮想記憶の入出力の報告は、それぞれ、多くの入出力が関連する 20 個のファイルとセグメントに制限されます。
filemon -v -o fmon.out -O all
filemon コマンドによって自動的にシステム・トレースが開始され、コマンド自体はバックグラウンドに入ります。このコマンドの後に、この時点で実行するアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力します。
trcstop
この例は、fmon.out ファイル上で詳細レポートが生成される点を除き、前の例に似ています。主な違いは、filemon コマンドがトレースを開始するときに踏襲したステップが示されることと、要約と詳細報告に 20 個のファイルとセグメントだけではなく、すべての入出力に関連する (おそらく多数の) すべてのファイルとセグメントが含まれることです。
filemon -i trcfile | pg
この例では、filemon コマンドによって、入力ファイル trcfile からファイルシステム・トレース・イベントが読み取られます。入力ファイルは、trcrpt -r コマンドを実行した結果のロウ・トレース・フォーマットでなければなりません。トレース・データはすでにファイルに取り込まれているので、アプリケーション・プログラムの実行のために、filemon コマンドがそれ自体をバックグラウンドに入れることはありません。ファイルが完全に読み取られると、仮想記憶、論理ボリューム、物理ボリュームの各レベルの入出力アクティビティーの報告が標準出力に表示されます (この例では、pg にパイピングされています)。
filemon -d -o fmon.out -O pv,lv
filemon コマンドによって自動的にシステム・トレースが開始され、コマンド自体はバックグラウンドに入ります。このコマンドの後に、この時点で実行するモニター対象でないアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力できます。
trcon
このコマンドの後に、この時点で実行するモニター対象のアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力できます。
trcoff
このコマンドの後に、この時点で実行するモニター対象でないアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力できます。
trcon
このコマンドの後に、この時点で実行するモニター対象のアプリケーション・プログラムとシステム・コマンドを入力してから、次のように入力できます。
trcstop
この例では、-O フラグで、モニターを論理ボリュームと物理ボリュームだけに制限しています。論理ボリュームと物理ボリュームに関連するトレース・イベントだけが使用可能です。また、-d フラグを使用しているので、 trcon コマンドが実行されるまでモニターは開始されません。システム・トレースは、trcoff と trcon コマンドによって、断続的に行うことができます。したがって、特定の期間だけモニターできます。
trace -a -T 768000 -L 10000000 -o trace.out -j 000,000,001,002,003,005,006,139,102,10C,106,00A,107, 101,104,10D,15B,12E,130,163,19C,154,3D3,1BA,1BE,1BC,10B,221,1C9,222,228,232,45B
モニター対象のアプリケーション・プログラムとシステム・コマンドを実行してから、次のように入力します。
trcstop
次に、trace ファイルをフォーマットします。
trcrpt -r trace.out > trace.rpt
gennames ファイルを作成します。
gennames -f > gennames.out
次に、-i と -n フラグの両方を指定して filemon を実行します。
filemon -i trace.rpt -n gennames.out -O all