web-dev-qa-db-ja.com

Javaアプリケーションでメモリ使用量をプロファイリングする最良の方法は?

これについては、SOで以前に同様の質問があったことを認識していますが、私が何をする必要があるかを正確に説明しましょう。

コマンドラインJavaアプリケーションを実行する一連のテストがあり、それらにメモリプロファイリングを追加したいと思います。表示されるオプションの1つは、コードを追加することです(おそらくサードパーティのツールを使用して/別のオプションは、アプリケーションとJVMを管理/計測するサードパーティツールを使用することです(理想的には、コードを変更する必要はありません)。 Valgrindのようなものですが、Java用です。可能であればオープンソースでもあります。

私が本当にやりたいのは、メモリ使用量が定期的に、たとえば毎秒監視され、テキストファイルにダンプされるようにメモリテストを設定することです。そうすれば、メモリ使用量が時間の経過とともに変動/増加/減少するかどうかを確認できます。最大ピークと最小ピークを計算することもできます。

ここの誰かがこのようなことをしましたか?

前もって感謝します。

24
Matt

JProfilerのようなものを使用すると、JVMに特定のパラメーターを追加するだけで済みます。 JVMTIを使用します。

私はあなたがプロファイラーと彼らがあなたのために何ができるかを正確に読んでいるべきだと思います。また、JVMTIを読むことをお勧めします。

JVMTMツールインターフェイス(JVM TI)は、ツールで使用するための新しいネイティブプログラミングインターフェイスです。状態を検査し、Java仮想マシン(JVM)で実行されているアプリケーションの実行を制御する方法を提供します。JVMTIは、JVM状態へのアクセスを必要とする幅広いツールをサポートします。これには、プロファイリング、デバッグ、監視、スレッド分析、およびカバレッジ分析ツールが含まれますが、これらに限定されません。

注:JVM TIは、Java仮想マシンプロファイラーインターフェイス(JVMPI)およびJava仮想マシンデバッグインターフェイス(JVMDI)を置き換えます。JVMPIおよびJVMDIはで削除されます。 J2SETMの次のメジャーリリース。

16
Peter D

Yourkit にはかなり良いプロファイラーもあります

6
Rad

チェックしましたか

VisualVM および Eclipse-Callisto

4
Liran Orevi

開始するのに適した場所は、JVMが「Java-Xrunhprof」をサポートしているかどうかを確認することです。これにより、シナリオを複雑にすることなくヒーププロファイリング情報を生成できます。

http://docs.Oracle.com/javase/7/docs/technotes/samples/hprof.html を参照してください。

あなたはそれを始めるのに十分だと思うかもしれません。

私はEclipseで開発していますが、その優れたプロファイラーを使用するためにNetbeansを使用しています。一部の商用のものと比較して制限がありますが、それでもほとんどのボトルネックを見つけるには十分です

2
Matt Large

jrcmdを使用できます。これは、JRockitJVMに付属のコマンドラインユーティリティです。 Javaプロセスのpidを知っている場合は、次のことを実行できます。

JROCKIt_HOME\bin\jrcmd <pid> print_object_summary

そしてそれはあなたに与えるでしょう:

31.8% 3198k    41907   -137k [C
11.9% 1196k      300     +0k [B
11.4% 1151k    49118     +6k Java/lang/String
 6.1% 612k     5604     +0k Java/lang/Class
 4.3% 431k     2388     +0k [I
 3.5% 353k    15097     +0k Java/util/HashMap$Entry
 ...
2
Kire Haglin

yourkit などのいくつかのプロファイラーには、メモリ割り当てをトレースするためのAPIがあります。ここでのもう1つのオプションは、 jxinsight または glassbox または jamon などの監視ツールです。

ヒープダンプを分析するには、 Eclipse Memory Analyzer が入手できる最高のツールです。これは無料でオープンソースなので、ヒープダンプの分析を必要なだけ自動化できます。

2
kohlerm

DynaTraceプロダクションエディションをお勧めします。メモリアプリケーションのプロファイルを作成するためのすばらしいツール。オーバーヘッドが低く、実行されたトランザクションが100%です。

1
Andre Santos

上記の回答に加えて、私は数年前にプロファイラーを使用することも楽しんでいました。それが役立つかどうかわからない。

1
uriDium