2017-11-05 4 views
0

Javaプログラムのメモリ使用量を分析する方法があるのか​​不思議です。私のコードはOutOfMemoryErrorでクラッシュしています。そのため、すべてを使っているものを見てみたいと思っています。それが役に立ちましたら、Intellij IDEAを使用していますが、使用しているテストケースがtxtファイルになっているので、実際にデバッグすることはできません。IDEAには標準入力を再ルーティングする方法がないと思いますその中でプログラムを実行しています。Javaの死後メモリ解析

+0

なぜ標準入力をリルートする必要がありますか? –

+0

VisualVMプロファイラを使用してください。これはJDKに付属しています。 – Carcigenicate

+0

ヒープダンプを強制し、https://www.eclipse.org/mat/にアクセスし、ダンプファイルをロードします。 – OldProgrammer

答えて

3

いくつかの方法があります。

Heapdump(メモリ):

jmap -dump:format=b,file=<heap_dump_filename> <pid> 

スレッドダンプ:

kill -3 

者が手動で呼び出されることを意図していて、オンデマンドでファイルを生成することができます。時間の経過とともにアプリがどのように動作するかを見たいときに便利です。

あなたはOOOのエラーを検出すると、自動的にそれを作るために、これらの変数を設定することができ、あなたのJavaプロセスで

:この上

+HeapDumpOnOutOfMemoryError 

さらに詳しい情報:今すぐhttps://docs.oracle.com/javase/7/docs/webnotes/tsg/TSG-VM/html/clopts.html

を、すべてのこれらのファイルが何かで読み取ることができますMATのように: https://www.eclipse.org/mat/

また、スレッドがSDKに付属するJava VisualVMのでダンプ読むことができる:https://docs.oracle.com/javase/7/docs/technotes/guides/visualvm/index.html

ヒープダンプは、メモリリーク、ヒープ問題、およびガベージコレクタの問題を分析するのに役立ちます。スレッドダンプを使用すると、スレッドをブロックしたか、サーバーを停止させるIO操作が多いかどうかを確認できます。 (通常、多くのログが呼び出されます)。

最後に、MATは4 GB以上の大きなヒープを読み取る際にいくつかの問題を抱えている可能性があります。私は時々IBMヒープ・アナライザーも使用します:https://www.ibm.com/developerworks/community/groups/service/html/communityview?communityUuid=4544bafe-c7a2-455f-9d43-eb866ea60091

私は通常、これらのタイプの問題を分析するのが楽しいです。 幸運を祈る!