6

Java用に存在するエンドツーエンドの優れたCPUプロファイラーは何ですか?

私が探しているもののクイックリスト:

  1. オフライン プロファイリング - プログラムの実行中にユーザーの操作や GUI は必要ありません。プロファイル データをファイルにダンプし、後で GUI を使用して表示する必要があります。
  2. エンド ツー エンドの記録 - プロファイラーは、J2SE アプリケーションのメイン コールに入った直後に記録を開始できる必要があります。JVM が終了する直前に記録を停止する必要があります。
  3. コール グラフの生成 - プロファイリングの後、データを視覚的なコール グラフに変換するとよいでしょう。

Google には C/C++ 用の優れたプロファイラーがあります - http://google-perftools.googlecode.com/svn/trunk/doc/cpuprofile.html

これに相当するJavaが存在する場合、それはまさに私が探しているものです。

正確な CPU コール プロファイリングを使用する場合に調べた他の商用プロファイラーと比較してパフォーマンスが悪いため、将来のプロファイラーのリストに HProf を含めません (通常はバイト コード インジェクションを介して実行されますが、これは低速ですが、HProf は少なくとも表示されます。他のプロファイラーよりも桁違いに遅く、1 回のサンプリング プロファイルの実行に 1 ~ 2 時間かかる場合、同じ実行を 1 日以上待つことは受け入れられません)。

4

4 に答える 4

5

私のお気に入りは、断然 JProfilerです。私は今までそれを認識していませんでした (私は常にインタラクティブなプロファイリング GUI を使用しているため) が、実際には、あなたが説明したとおり、オフライン プロファイリングをサポートしています。

その他の優れた機能:

  • すべての SQL ステートメントをプロファイリングするため、どの DB クエリが速度を低下させているかを確認できます。

  • どのメソッド (どのクラスとパッケージ内) が最も多くのメモリを割り当てているか、どのタイプのオブジェクトと配列に対して、およびそれらのオブジェクトの寿命を追跡します。そのため、メモリ リークが発生している場合、どのタイプのクラス インスタンスが有用でなくなっているかを追跡し、それらのオブジェクトが最初に割り当てられたメソッド (およびオブジェクトを維持している参照を保持しているメソッド) を見つけるのは簡単です。

  • VM の成長を追跡し、GC フル コレクションの頻度を監視し、各コレクション サイクル中に解放された (どのタイプの) オブジェクトの数を判断できます。

  • そしてもちろん、呼び出しスタック全体の呼び出し数と平均実行時間 (排他的または包括的) とともに、すべてのメソッド呼び出しの階層的な内訳を取得します。この階層は、「最悪のボトルネック」関数の観点から、実行時間またはメモリ割り当てのいずれかで並べて表示することもできます。

私にとって、JProfiler は私の開発プロセスで最も重要なツールの 1 つです (Eclipse に次いで 2 番目)。


また、10 日間の無料試用版があります。ダウンロードしてチェックしてみてください。ところで、私は会社などとは何の関係もありません。私はここ 5、6 年間、幸せな顧客でした。

于 2008-12-24T21:39:46.153 に答える
3

私はオフライン プロファイリングに詳しくありません。それはhprofの目的ではありませんか?そうでなければ、私はYourKit profilerで非常に良い経験をしました。

于 2008-12-24T21:04:17.240 に答える
1

私はNetBeans Profilerにとても満足しています。また、すべての要件を満たしていると思います。

于 2008-12-24T21:23:44.377 に答える
0

JRockit Mission Controlに付属のランタイム アナライザーを試すことができます。後で GUI で開くことができる記録ファイルが生成されます。オーバーヘッドは非常に低く、通常は 1 ~ 2% 未満であり、非常に使いやすいです。

次のように、コマンド ラインから記録を開始できます。

JROCKIT_HOME\bin>java -XXjra:recordingtime=2000s,filename=myrecording.jra,sampletime=1

JVM が終了すると、記録が完了する前にプロファイリング データがディスクにフラッシュされます。

于 2008-12-25T06:56:46.670 に答える