1

外部ツールが問題を引き起こしています。外部の GUI ツールを使用せずに、関数ごとに単純な CPU 使用率/時間を取得する方法はありますか?

VisualVM を使用して自分の Java プログラムのプロファイルを作成しようとしましたが、ひどい、魂を打ち砕く、野心を殺す結果が得られました。ヒープ使用率のみが表示されます。私が興味を持っているのは CPU 使用率ですが、そのパネルには単にこの JVM ではサポートされていませんと表示されます。ちなみに、どのJVMを使用するかは教えてくれません。JDK 6 をダウンロードし、それを使用して起動しました。プログラムが同じ VM をターゲットにしていることを確認しましたが、何もありません! それでも同じ、役に立たないエラーメッセージ。私のニーズはとてもシンプルです。プログラムがどこで時間を費やしているかを知りたいだけです。Python には、呼び出しごとと合計時間の両方の形式で、各関数で費やされた場所を出力する優れたプロファイラーが組み込まれています。それはまさに私が今探している範囲です。誰にも提案はありますか?

4

1 に答える 1

2

見栄えはよくありませんが、コマンド ラインにスイッチを追加することで、組み込みの hprof プロファイリング メカニズムを使用できます。

-Xrunhprof:cpu=times

多くのオプションが利用可能です。詳細については、 HPROFの Oracle ドキュメント ページを参照してください。

したがって、たとえば、プロファイリングする実行可能 jar がある場合は、次のように入力できます。

java -Xrunhprof:cpu=times -jar Hello.jar

実行が完了すると、"java.hprof.txt" という名前の (大きな) テキスト ファイルが作成されます。

そのファイルには興味深いデータの山が含まれますが、探している部分は次の部分です。

CPU TIME (ms) BEGIN (total = 500) Wed Feb 27 16:03:18 2013
rank   self  accum   count trace method
   1  8.00%  8.00%    2000 301837 sun.nio.cs.UTF_8$Encoder.encodeArrayLoop
   2  5.40% 13.40%    2000 301863 sun.nio.cs.StreamEncoder.writeBytes
   3  4.20% 17.60%    2000 301844 sun.nio.cs.StreamEncoder.implWrite
   4  3.40% 21.00%    2000 301836 sun.nio.cs.UTF_8.updatePositions

または、まだインストールしていない場合は、VisualVM-Extensions、VisualGC、Threads Inspector、および少なくとも Swing、JVM、Monitor、および Jvmstat Tracer Probes をインストールしてみます。

Tools->Pluginsに移動してインストールします。詳細が必要な場合は、コメントしてください。この回答をさらに拡張します。

于 2013-02-27T21:16:19.920 に答える