Frage

Nun, das ist peinlich ...

Ich fange mit dem Eclipse Memory Analyzer zu sehen für Java Speicherlecks auf einem Windows-zu spielen. Schritt 1 ist eine Heap Dump-Datei zu erhalten. Um dies zu tun beginne ich meine Java (javaw.exe) Prozess von Eclipse aus und verbinden Sie es mit jconsole. Dann auf der jconsole MBeans Registerkarte klicken ich die dumpheap Taste. Das erste Mal, dass ich das tat, sah ich ein Pop-up sagen, es ist die Heap-Dump-Datei erstellt hatte, aber nicht seinen Namen oder den Ort zu geben. Nun, wenn ich wieder ein dumpheap tun, während auf einem anderen javaw.exe Prozess verbunden ist, jconsole sagt:

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

und natürlich nicht geben ihren Namen oder den Pfad. Wo könnte das sein?

Ich habe gesucht mein Laufwerk C: (mit Cygwin Kommandozeilen-Tool) für Dateien „Hprof“ oder „java_pid“ oder „heapdump“ enthalten, und alles, was plausibel konnte nicht gefunden werden. Ich habe sogar die Windows-Suche suchen alle Dateien in meinem Eclipse-Workspace verwendet, die in den letzten Tagen geändert haben.

Ich bin der Sun Java 1.6 JVM verwenden, und haben nicht -XX:. HeapDumpPath Satz

Update (28. April 2010): Mein ursprünglichen Heap-Speicherort der Datei muss von jconsole bestimmt wurde, löste das Werkzeug, das ich den Heap Dump aus. Die Heapdump Lage JVM muss gelten nur für Heap-Dumps löst (zB auf einem OutOfMemoryException).

Matt B Vorschlag zur Verwendung jvisualvm löst schön mein Problem von mir zu einem weitaus nützlichen Ersatz für die alte jconsole zeigt. Es hat einen schönen Speicher-Profiler, dass zeigt, welche Arten von Objekten sind am zahlreichsten und am meisten Speicher halten. Und es hat einen Monitor, der zeigt tatsächliche Speichernutzung über die Zeit. Wenn Sie es für einen Heap Dump fragen, es sagt Ihnen, die Dateinamen selbst! Die Eclipse Memory Analyzer gibt Ihnen weitere Informationen.

War es hilfreich?

Lösung

Versuchen Sie jvisualvm , hat es eine viel bessere Schnittstelle.

Beachten Sie, dass mit JDK Version 6 Update 7 oder höher, Java VisualVM beginnt mit JDK gebündelt. Siehe hier .

Andere Tipps

warum nicht setzen Sie den ersten Parameter für dumpheap (String, boolean), wenn Sie versuchen dumpheap () von jconsole aufzurufen? es ist die erzeugte heapdump Datei Speicherort und Dateinamen.

Nach dem docs für die Sun Java SE6 JVM:

Standardmäßig wird die Heapdump erstellt in eine Datei namens java_pid << em> pid >. Hprof in der Arbeitsverzeichnis der VM

In Eclipse wird das Arbeitsverzeichnis auf dem „Argument“ -Register des „Run Configurations“ Dialogs definiert. Der Standardwert ist das gleiche Verzeichnis wie die Klasse, die Sie ausgeführt werden.

Sie können immer verwenden ProcessMonitor- zu sehen, wo es versucht, zu schreiben an :) Geschehen selbst dies in der Vergangenheit.

Ich fand die abgeladen Datei in denselben Ordner, in dem die .bat-Datei whic meine Java-Anwendung starten platziert wird. (Ich verwende Windows 8.1, Java 7) In meinem Fall Jboss, / jboss-as / bin / Ordner. Um es zu finden I * Dateien, mit heute Erstellungsdatum und mehr als 200 MB gesucht.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top