5

まあ、これは恥ずかしいです ...

Windows ボックスでの Java メモリ リークを探すために、Eclipse メモリ アナライザーをいじり始めています。ステップ 1 は、ヒープ ダンプ ファイルを取得することです。これを行うには、Eclipse 内から Java (javaw.exe) プロセスを開始し、jconsole で接続します。次に、jconsole MBeans タブで、dumpHeap ボタンをクリックします。初めてこれを行ったとき、ヒープ ダンプ ファイルが作成されたというポップアップが表示されましたが、その名前や場所は示されていませんでした。別の javaw.exe プロセスに接続しているときに再度 dumpHeap を実行すると、jconsole は次のように言います。

Problem invoking dumpHeap : java.io.IOException: File exists

もちろん、その名前やパスは指定しません。それはどこでしょうか?

「hprof」、「java_pid」、または「heapdump」を含むファイルを C: ドライブ (cygwin コマンド ライン ツールを使用) で検索しましたが、妥当なものは見つかりませんでした。Windows 検索を使用して、前日に変更された Eclipse ワークスペース内のすべてのファイルを探しました。

Sun Java 1.6 JVM を使用していますが、-XX:HeapDumpPath が設定されていません。

更新 (2010 年 4 月 28 日):元のヒープ ファイルの場所は、ヒープ ダンプをトリガーしたツールである jconsole によって決定されたに違いありません。JVM のヒープ ダンプの場所は、JVM がトリガーするヒープ ダンプ (たとえば、OutOfMemoryException) にのみ適用する必要があります。

jvisualvm を使用するという Matt B の提案は、古い jconsole のはるかに便利な代替手段を教えてくれ、私の問題をうまく解決してくれます。どのタイプのオブジェクトが最も多く、最も多くのメモリを保持しているかを示す優れたメモリ プロファイラがあります。また、時間の経過に伴う実際のメモリ使用量を示すモニターがあります。ヒープダンプを要求すると、ファイル名も教えてくれます! Eclipse Memory Analyzer は、完全な詳細を提供します。

4

5 に答える 5

8

jvisualvmを試してみてください、それははるかに優れたインターフェースを持っています。

JDKバージョン6アップデート7以降では、JavaVisualVMがJDKにバンドルされていることに注意してください。ここを参照してください。

于 2010-04-28T17:40:32.393 に答える
6

jconsole から dumpHeap() を呼び出すときに、最初のパラメータを dumpHeap(String,boolean) に設定しないのはなぜですか? これは、生成されたヒープダンプ ファイルの場所とファイル名です。

于 2010-07-07T03:16:00.907 に答える
4

Sun Java SE6 JVMのドキュメントによると:

デフォルトでは、ヒープ ダンプはVM の作業ディレクトリにあるjava_pid< pid >.hprof というファイルに作成されます。

Eclipse では、作業ディレクトリは [実行構成] ダイアログの [引数] タブで定義されます。デフォルト値は、実行中のクラスと同じディレクトリです。

于 2010-04-28T01:42:17.843 に答える
2

いつでもProcessMonitorを使用して、どこに書き込もうとしているかを確認できます:)これは過去に自分で行いました。

于 2010-04-28T01:01:22.830 に答える
0

ダンプされたファイルが、Java アプリケーションを起動する .bat ファイルが配置されているのと同じフォルダーにあることがわかりました。(私はWindows 8.1、Java 7を使用しています)私の場合、jboss、/jboss-as/bin/フォルダー。それを見つけるために、作成日が今日で 200MB を超える * ファイルを検索しました。

于 2015-01-13T15:04:02.800 に答える