11

Jetty で wicket+spring+hibernate アプリケーションを実行しています。VisualVM (jdk 1.7.0_9) を使用して CPU プロファイリングを開始すると、最初に数分間停止し、コンソールに次のように出力されます。

Profiler Agent: 250 classes cached.
Profiler Agent: 250 classes cached.

これらの行は約 20 回繰り返され、VisualVM はインストゥルメンテーションを開始し、約 8000 のメソッドをインストルメント化したと言います。

この後、Web アプリケーションのボタンをクリックすると、コンソールが次のような行を出力している間、アプリケーションが数分間完全にハングします。

Profiler Agent: Redefining 100 classes at idx 100, out of total 336 

この後、プロファイリング結果が得られますが、時間のほぼ 99.6% が

sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run()

これにより、VisualVM はまったく使用できなくなります。ここで犯人は何だと思いますか?

Jetty 8.1.2.v20120308 を実行しています

4

2 に答える 2

14

最初に CPU サンプリングから始めることをお勧めします。何が問題なのかがわかったら、プロファイリングに切り替えて詳細情報を取得できます。Jetty サーバーのプロファイリングをセットアップする方法の詳細については、「VisualVM を使用したプロファイリング、パート 1」および「VisualVM を使用したプロファイリング、パート 2 」を必ずお読みください。

于 2012-11-01T07:21:55.263 に答える
7

答えは、インストルメント化されるクラスの範囲を狭めることです。

プロファイラーの設定オプションをクリックし、「クラスをプロファイルしない」または「クラスのみをプロファイルする」を確認します。調査したくないサードパーティのライブラリは必ず除外してください。たとえば、アプリで Jython を使用していて、プロファイラーが実行時に動的に生成されたクラスを含む可能性のある数千のクラスを計測しようとしていました (良くない)。

于 2013-03-12T02:07:22.677 に答える