6

私のTomcat(バージョン:5.5.25)は、VisualVM(ver:1.3.2)でプロファイリングしようとするアプリケーションを実行します。すべてが見栄えがしますが、すべてのクラスとメソッドがvisualVMに表示されるわけではありません。欠落しているものはスレッド[main]で実行されます。これは、ブレークポイントにヒットした場合に受け取るスレッドの名前であるため、私はこれを知っています。メインの外で実行されるクラス(例:[worker1]、[worker2]、...)は正しく表示されます。

理由は何でしょうか?または私は何を試すことができますか?

私が実行しているアプリケーション(Assentis Docbaseと呼ばれます)はクローズドソースであるため、デフォルトのTomcat構成をカスタマイズしている可能性があります。しかし、彼らは私が自分のクラスでフレームワークを拡張することを可能にしました、そしてそれは私がプロファイリングしたいものです。

VisualVMダウンロードしたデフォルトの構成で実行します。

4

4 に答える 4

8

おそらく、プロファイリングルートメソッドをカスタマイズする必要があります。VisualVMを使用したプロファイリング、パート1およびVisualVMを使用したプロファイリング、パート2を参照してください。[サンプラー]タブを使用して、Tomcatが実行していることの概要を把握することもできます。

于 2011-07-25T18:56:47.227 に答える
2

「メイン」スレッドが表示されない理由は次のとおりです。

  • スレッドが終了した可能性があります。

  • スレッドは、を呼び出すことによってその名前を変更できた可能性がありますThread.setName()

本当の理由を知りたい場合は、Tomcatのソースコードを調べる必要があります。


このページでは、設定がどこにあるかを説明します。Googleはあなたの友達です。

于 2011-07-25T09:50:27.300 に答える
2

VisualVMがスレッド[main]でメソッド呼び出しを表示しなかった理由は、VisualVMでは最大32個のスレッドを同時にプロファイリングできるためです。より多くのスレッドを監視できるようにすることはできません。これは、VisualVMを使用したプロファイリング、パート2、セクション「NetBeansプロファイラとの比較」に記載されています。

「プロファイルされたスレッドの制限は常に32です。」

:-(

于 2011-07-26T11:45:12.153 に答える
0

プラグイン設定で「クラスからプロファイリングを開始する」を正しく設定していない可能性があります。

org.acme.competition.*プロファイリング用に(A)を構成したとします。

VisualVMスタートアップ設定ダイアログ

org.acme.reference.ReferenceImplしかし、次のコマンドを使用して、誤ってクラス(B)のプロファイルを作成しました。

$ cat source.txt | java -Xverify:none \
    -agentpath:/usr/share/visualvm/profiler/lib/deployed/jdk16/linux-amd64/libprofilerinterface.so=/usr/share/visualvm/profiler/lib,5140 \
    -cp bin/ org.acme.reference.ReferenceImpl

その場合、これは間違った結果になります。

間違った結果

代わりに、 VisualVMのスタートアッププラグイン構成「クラスからプロファイリングを開始する」を構成org.acme.reference.*すると、結果は正しくなります。

正しい結果

スタートアッププロファイラーガイドも参照してください。

于 2017-08-25T20:19:08.053 に答える