2016-09-17 11 views
5

最近、アプリケーションの実行中にjava.lang.OutOfMemoryError例外が発生しました。.hprofファイルからヒープデータを分析してメモリリークを減らすにはどうすればよいですか?

このようなインスタンスでは、jvisualvmを使用してヒープダ​​ンプを取得できました。

NetBeans 8.1 IDEを使用してヒープダ​​ンプファイルから取得した.hprofヒープダンプファイルを開くことができましたが、データダンプの解析方法はわかりません。私は、ダンプファイルを読んで、アプリケーションの観点からメモリ不足例外を減らすための是正措置を講じる方法を知りたいと思います。

編集: 私はヒープから取得したコンポーネントreport

をダンプ付属しているそして、あなたはこのような場合のために必要な、ここでリーク容疑者だreport

答えて

7

JProfilerなどのプロファイラを使用して、単にthis great videoに記載されているものを適用するなど、メモリリークの根本原因を見つける方法は多数あります。 Eclipse Memory AnalyzerMATとして知られています。this videoにあるように、ヒープダンプを分析してメモリリークの潜在的な原因を提案することができます(疑惑レポートの詳細を参照してください)。here)。もう1つの方法は、Java Flight Recorderthis approachに適用することです。または、this videoに記載されている方法を使用してJVisualVMを使用します。

+0

MATのビデオチュートリアルを、他のツールで提案されているのと同様に提案できますか? –

+0

私はMATツールを使用してリーク疑惑の報告を得ることができますが、リストにはプリミティブなクラスだけが含まれています。たとえば、Java.util.vectorと書いてあります。リークをプラグできるように、 ? –

+0

あなたの質問にあなたのレポートを追加してください –

1

ツールは、このアプリである:

Memory Analyzer Tool

& startをダウンロードし、hprofファイルをロードしてください。 hprofのサイズに応じて1〜2分かかるかもしれませんが、メモリ使用量に関する素晴らしい分析が表示されます。これは非常に使いやすく、潜在的なメモリリークを自動的に強調表示し、異なる角度からデータを分析します。

私は、自明ではないメモリの問題を扱っているときにMATを使用していますが、私が覚えている限り、これらの問題はすべて解決しました。

+0

MATツールを使用してリーク疑惑レポートを取得できますが、リストにはプリミティブクラスのみが含まれています。たとえば、Java.util.vectorと表示されます。リークを塞ぐことができますか? –

0

一般に、基本的には「最もRAMを使用しているもの」を分析するのですか?あなたがそれを理解したときに(そして、おそらく私がRAMを使い果たしてしまう問題なのでしょうか?)それで、そのようなオブジェクトがたくさんある理由を考えてみましょう。オブジェクトに保持されているもので参照されていますが、必要はありませんか?それとも、それは誤っていてはならない細目の参照を偶然保持していますか?あまりにも大規模なアーキテクチャ/パラダイムを使用していますか(例:「すべてを1つの大きな配列に格納する」)?データベースクライアントは大きなResultSetを返す前にRAMにバッファリングしていますか?その他...

関連する問題