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

StackOverflow https://stackoverflow.com/questions/756873

質問

これについては、SO で以前にも同様の質問があったことは承知していますが、何をする必要があるかを正確に説明させてください。

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

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

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

前もって感謝します。

役に立ちましたか?

解決

JProfilerをのようなものですべてを行う必要があるJVMに特定のパラメータを追加することです。これは、JVMTIを使用します。

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

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

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

他のヒント

Yourkit にもかなり良いプロファイラを持っている。

チェックしましたか

VisualVM そして Eclipse-カリスト?

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

http://docs.oracle.com/を参照してください。するJavaSE / 7 /ドキュメント/技術情報/サンプル/ hprof.html

あなたは、起動のためにあなたのためにそれが十分かもしれません。

いくつかのプロファイラのような yourkit のメモリ割り当てをトレースするためのAPIの持っています。ここで別のオプションは、このような jxinsight のようなツールを監視しています  または glassbox のか<のhref = "http://jamonapi.sourceforge.net/ "REL =" nofollowをnoreferrer ">ハモンの

は、ヒープを分析するためにあなたが得ることができる最高のツールですの Eclipseのメモリアナライザは、ダンプします。これは、フリーでオープンソースですので、あなたは、ヒープの分析は、あなたが好きなだけをダンプ自動化することができます。

私は、Eclipseでの開発が、私はその優れたプロファイラを使用するように周りにNetbeansのを持っています。これは、いくつかの商用のものに比べて限定されたが、

ほとんどのボトルネックをスポッティングのために十分にまだ良いです

あなたは、JRockit JVMに付属しているコマンドラインユーティリティであるのJRCMDのを使用することができます。あなたは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
 ...

私も数年前にプロファイラを使用して楽しんで上記の回答に加えて。それが助けかどうかを知るしないでください。

私は、dynaTraceの生産版をお勧めします。メモリアプリケーションをプロファイルするすばらしいツール。低いオーバーヘッド及び実行されるトランザクションの100%

scroll top