次のフラグで運用サーバーを実行しています:-XX:+ HeapDumpOnOutOfMemoryError
昨夜、サーバーでヒープエラーが発生すると、Java-38942.hprofファイルが生成されました。システムの開発者はフラグを知っていましたが、有用な情報を取得する方法はありませんでした。
何か案は?
かなり高度なツールで本格的な突っ込みを行うには、Eclipseで Memory Analyzerプロジェクト をご覧ください。SAPが提供しています。
あなたができることのいくつかは、メモリリークなどを見つけるのに驚くほど良いです-メモリ内のオブジェクトに対して制限されたSQL(OQL)のフォームを実行するなど、.
SELECT toString(firstName)FROM com.yourcompany.somepackage.User
完全に素晴らしい。
JHAT 、JDKでデフォルトで提供されるJavaヒープ分析ツールを使用できます。コマンドラインですが、メモリを調べるために使用するWebサーバー/ブラウザを起動します。最もユーザーフレンドリーではありませんが、少なくともあなたが行くほとんどの場所はすでにインストールされています。非常に便利なビューは、一番下にある「ヒープヒストグラム」リンクです。
例:jhat -port 7401 -J-Xmx4G dump.hprof
jhat
はOQL "these days"も実行できます(下のリンク "execute OQL")
Netbeans Profilerの HeapWalker またはスタンドアロンツールの Visual VM を使用することもできます。 Visual VMはスタンドアロンであるためJHATの代替として優れていますが、JHATよりもはるかに使いやすいです。
Visual VMを完全に使用するには、Java 6以降が必要です。
Eclipse Memory Analyzer を取得するだけです。より良いものはありませんし、無料です。
JHATは「おもちゃのアプリケーション」にのみ使用できます
YourKit Javaプロファイラーもそれらを処理するようです。
Heapdumpのカスタム分析を行う場合は、次のとおりです。
このライブラリは高速ですが、解析コードをJavaで記述する必要があります。
ドキュメントから: