Frage

Ich habe es geschafft, einen Speicher ‚Leck‘ in einer Java-Anwendung zu bekommen Ich entwickle. Wenn meine JUnit-Testsuite läuft ich zufällig aus Ausnahmen von Speicher erhalten (java.lang.OutOfMemoryError).

Welche Tools kann ich den Haufen meiner Java-Anwendung zu untersuchen, um zu sehen, was alle meine Heap mit, damit ich arbeiten können, was Verweise auf Objekte ist zu halten in der Lage sein sollte, Müll gesammelt werden.

War es hilfreich?

Lösung

VisualVM wird in den neuesten Versionen von Java enthalten. Sie können diese verwenden, um einen Heap Dump zu erstellen, und schauen Sie sich die Objekte darin.

Alternativ können Sie auch eine heapdump commandine erstellen jmap mit (in Ihrem jdk / bin dir):

jmap -dump:format=b,file=heap.bin <pid>

Sie können auch diese verwenden, um ein schnelles Histogramm aller Objekte zu erhalten

jmap -histo <pid>

Ich kann Eclipse-Memory Analyzer empfehlen ( http://eclipse.org/mat ) für fortgeschrittene Analyse der Halde Dumps. Damit können Sie genau herausfinden, warum ein bestimmtes Objekt oder eine Gruppe von Objekten am Leben ist. Hier ist ein Blog-Eintrag zeigt Ihnen, was Memory Analyzer tun können: http://dev.eclipse.org/blogs/memoryanalyzer/2008/05/27/automated-heap-dump-analysis-finding-memory-leaks-with- ein-Klick /

Andere Tipps

Wenn Sie etwas frei benötigen, versuchen VisualVM

Aus der Beschreibung des Projektes:

  

VisualVM ist ein visuelles Werkzeug Command JDK-Tools und leichte Profilierung Fähigkeiten zu integrieren. Sowohl für die Entwicklung und Produktion Zeit verwenden.

Dies ist eine ziemlich alte Frage. Eine Menge Leute haben könnte mit IntelliJ gestartet, da es ursprünglich beantwortet wurde. IntelliJ hat ein Plugin, das Speichernutzung JVM Debugger Speicher Ansicht .

Verwenden Sie einen Profiler wie JProfiler oder YourKitProfiler

JProfiler funktionierte sehr gut für mich ....

http://www.ej-technologies.com/products/jprofiler /overview.html

Mit dem Eclipse-Memory Analyzer

Es gibt kein anderes Werkzeug, das ich kenne jedes Werkzeug, das nahe kommt es Funktionalität und Leistung und Preis (Freier und Open Source), wenn Heapspeicherauszüge zu analysieren.

Wenn Sie ein System verwenden, das GTK unterstützt Sie könnten versuchen, mit JMP .

Sie können den Memory Leak Detector versuchen, den Teil der JRockit Mission Control Tool Suite. Es ermöglicht Ihnen, die Haufen zu inspizieren, während die JVM läuft. Sie brauchen keine Schnappschüsse ganze Zeit in Anspruch zu nehmen. Sie können einfach online an die JVM verbinden und dann sehen, wie die Haufen Änderungen zwischen Garbage Collection. Sie können auch Objekte inspizieren, folgen Referenzen grafisch und erhalten Stack-Traces aus, wo Ihre Anwendung derzeit Objekte zuordnet. Hier ist eine kurze Einführung rel="nofollow.

Das Tool ist kostenlos für die Entwicklung verwenden, und Sie können es herunterladen hier .

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