web-dev-qa-db-ja.com

.hprofファイルを分析するにはどうすればよいですか?

次のフラグで運用サーバーを実行しています:-XX:+ HeapDumpOnOutOfMemoryError

昨夜、サーバーでヒープエラーが発生すると、Java-38942.hprofファイルが生成されました。システムの開発者はフラグを知っていましたが、有用な情報を取得する方法はありませんでした。

何か案は?

197
Nick Stinemates

かなり高度なツールで本格的な突っ込みを行うには、Eclipseで Memory Analyzerプロジェクト をご覧ください。SAPが提供しています。

あなたができることのいくつかは、メモリリークなどを見つけるのに驚くほど良いです-メモリ内のオブジェクトに対して制限されたSQL(OQL)のフォームを実行するなど、.

SELECT toString(firstName)FROM com.yourcompany.somepackage.User

完全に素晴らしい。

189
Cowan

JHAT 、JDKでデフォルトで提供されるJavaヒープ分析ツールを使用できます。コマンドラインですが、メモリを調べるために使用するWebサーバー/ブラウザを起動します。最もユーザーフレンドリーではありませんが、少なくともあなたが行くほとんどの場所はすでにインストールされています。非常に便利なビューは、一番下にある「ヒープヒストグラム」リンクです。

例:jhat -port 7401 -J-Xmx4G dump.hprof

jhatはOQL "these days"も実行できます(下のリンク "execute OQL")

58
CMS

Netbeans Profilerの HeapWalker またはスタンドアロンツールの Visual VM を使用することもできます。 Visual VMはスタンドアロンであるためJHATの代替として優れていますが、JHATよりもはるかに使いやすいです。

Visual VMを完全に使用するには、Java 6以降が必要です。

32
James Schek

Eclipse Memory Analyzer を取得するだけです。より良いものはありませんし、無料です。

JHATは「おもちゃのアプリケーション」にのみ使用できます

11
kohlerm

YourKit Javaプロファイラーもそれらを処理するようです。

7
Polaris

Heapdumpのカスタム分析を行う場合は、次のとおりです。

このライブラリは高速ですが、解析コードをJavaで記述する必要があります。

ドキュメントから:

  • ヒープダンプを処理するためにディスク上に一時ファイルを作成しません。
  • GZ圧縮ヒープダンプを直接処理できます
  • HeapPath表記
2
Andrejs