4

私はさまざまなJavaパフォーマンス監視ツールを見てきました。

私はperf4j+アスペクトjを使用するソリューションを考案しました。これにより、アスペクトjポイントカット式で監視するクラスを定義できます。ただし、aspectjも(AFAIK)、実行時にポイントカット式を変更することはできません。したがって、新しいクラスを監視する必要がある場合は、aop.xmlを変更して再コンパイルする必要があります(または、AspectJロードタイムウィービングを使用している場合は、少なくともアプリを再起動します)。

これまでのところ、アプリケーションを再起動せずに実行時にクラスをインストルメントできるものは見つかりませんでした。それを行うことができるツール/テクノロジーはありますか?

4

4 に答える 4

3

これらのタイプのツールは通常、実行時にクラスをインストルメントしません。代わりに、JVMTIインターフェースを使用します(これが何であるかわからない場合は、グーグルで検索してください)。

それを使用する製品の代表的な例:

Yourkit、JProfiler

いくつかのオープンソースツールがありますが、それらのどれもが市販のツールほど洗練されているとは思いませんでした。

于 2012-08-02T14:58:01.997 に答える
1

完璧な小さなライブラリBTraceを見つけました。これは、まさに私が必要としていたことを実行します。これは、実行時にインストルメントされたクラスのバイトコードを操作することで機能し、アプリケーションを再起動する必要はありません。ユーザーガイドをチェックして、セットアップがいかに簡単かを確認してください。

Btraceについて言及する価値のあるもう1つのことは、作成者は本番環境で安全に作業できるようにするために多大な努力を払ってきたことです。

トレースアクションが「読み取り専用」(つまり、トレースアクションがトレースされたプログラムの状態を変更しない)および制限付き(つまり、トレースアクションが制限時間内に終了する)であることを保証するために、BTraceプログラムはのみ実行できます。制限された一連のアクション。

于 2012-08-08T05:55:12.660 に答える
0

Eclipse(またはNetBeans)のデバッガー/プロファイラーを使用することをお勧めします。
とてもパワフルです。

これらのツール専用のプロジェクト全体もあります:
http ://www.eclipse.org/projects/project.php?id = tptp.performance

およびいくつかの興味深いプラグイン:
http ://code.google.com/a/eclipselabs.org/p/jvmmonitor/

于 2012-08-02T15:06:07.273 に答える
0

Mattが言ったように、YouKitJavaProfilerはJavaバイトコードを計測できます。YourKitを使用すると、独自のプローブを作成して、実行中のJavaアプリに挿入できます。プローブAPIを使用すると、メソッドパラメータにアクセスしたり、値を返したり、例外をキャッチしたりできます。

ドキュメントはここにあります: http ://www.yourkit.com/docs/11/help/probes.jsp

于 2012-08-10T12:26:42.020 に答える