5

Webサービスの初回初期化時にApache CXFが「何か」を実行して逃げている理由を見つけようとしています。「何か」はおそらくある種のIOであり、何らかの外部アドレス/スキーマ/DTDを解決しようとしていると推測しています。

そのため、すべての IO を監視できる何らかのフックを見つけようとしています。VMレベルまたはOSレベルで(LinuxとWindowsの両方で実行できますが、wiresharkの実行は許可されておらず、理論的にはファイルIOである可能性があります).

何が起こっているのかを追跡する方法について何か提案はありますか?

4

5 に答える 5

4

何が起こっているのかを本当に知りたい場合の 1 つの方法は、Apache プロセスで「strace」または「ltrace」を実行することです。ここに簡単な紹介があります。興味深いのは、 strace が特定の呼び出しでブロックする必要があることです。つまり、仮説が正しい場合は i/o を待機します。

特定のプロセスが使用しているファイル (およびネットワーク ソケット) を確認するには、「lsof」を参照してください。たとえば、特定のプロセスによって開かれているファイルを確認するには、次のようにします。

lsof -p process_id  # by PID
lsof -c httpd       # by a process name

一般的なネットワーク接続を確認するには、「netstat」を試してください

于 2009-01-15T09:06:05.990 に答える
2

filemonを使用できるWindowsでは、すべてのファイル アクセスが一覧表示され、それらをフィルター処理して、関心のあるプロセスのアクセスのみを表示できます。

Windows Process Monitorのより最近のバージョンでは、進むべき道のようです。

于 2009-01-15T08:53:26.683 に答える
2

WSDL の解決、解析、処理などで忙しい可能性が高いです。

実際には、初めて、それらのスキーマのロードと検証などを含むすべてのSpring構成ファイルも処理しています。

また、wireshark のようなものを実行して、すべてのネットワーク トラフィックを追跡し、何かを取得しようとしているかどうかを確認することもできます。

于 2009-01-19T21:56:29.040 に答える
2

OS レベルからアプリを監視する strace と filemon に加えて、インタラクティブなプロファイラーを試してみることもできます。Sun の無料のVisualVMのようなツールを使用すると、さまざまなメソッドが呼び出される頻度を確認できるだけでなく、スレッド ダンプを簡単に生成して表示することもできます。そうすれば、アプリが独自のコードでスピンしているかどうか、または完了しない IO を待ってスレッドがブロックされているかどうかを確認できます。

于 2009-01-15T19:44:13.627 に答える
1

InTraceを使用して、JVM レベルでアプリケーションをトレースできます。これにより、起動時に実行されていた Java コードを特定できます。これは、Java エージェントを使用して、クラスがロードされるときにインストルメンテーションをクラスに追加し、使用されているすべてのクラスのメソッドの開始/終了呼び出しを生成できるようにします。

于 2011-06-19T22:15:35.890 に答える