Wie kann ich einen Heap-Dump auf Java 5 durchführen, ohne zuerst die Daten zu sammeln?

8

Wir haben eine lange laufende Server-Anwendung, auf der Java 5 läuft, und wir können sehen, wie die alte Generation im Laufe der Zeit langsam wächst. Es ist korrekt auf einem vollständigen GC freigegeben, aber ich möchte in der Lage sein, die nicht erreichbaren Objekte in Eclipse MAT mit einem Heap-Dump zu sehen. Ich habe erfolgreich einen Heap-Dump mit + XX: HeapDumpOnCtrlBreak erhalten, aber die JVM macht immer einen GC vor dem Dumping der Heap. Anscheinend passiert dies nicht auf Java 6, aber wir stecken jetzt auf 5 fest. Gibt es eine Möglichkeit, dies zu verhindern?

    
Colin 12.08.2009, 19:51
quelle

5 Antworten

1

Ich empfehle einen Profiler von Drittanbietern wie YourKit , mit dem Sie Snapshots erstellen können, ohne zuerst den GC zu starten . Zusätzlicher Bonus, du kannst einen Schnappschuss ohne den ganzen Ctrl-Break-Shenanigans machen.

    
skaffman 12.08.2009, 19:53
quelle
9

Verwenden Sie jconsole oder visualvm oder jmc oder ... andere jmx-Verwaltungskonsole. Öffnen Sie HotSpotDiagnostic in com.sun.management. Wählen Sie die Methode dumpHeap und geben Sie zwei Parameter ein:

  • Pfad zur Dump-Datei
  • (true / false) Nur Live-Objekte ablegen. Verwenden Sie false , um alle Objekte zu löschen.

Beachten Sie, dass die Sicherungsdatei von der JVM geschrieben wird, mit der Sie verbunden sind, nicht von JVisualVM. Wenn die JVM also auf einem anderen System ausgeführt wird, wird sie auf dieses System geschrieben.

    
daggett 23.02.2016 11:04
quelle
4

Haben Sie das Standard-Jmap-Tool ausprobiert, das mit dem JDK ausgeliefert wurde? Die jmap-Maut wurde offiziell in Java 5 eingeführt.

Beispiel-Befehlszeile: / java / bin / jmap -heap: format = b

Das Ergebnis kann mit dem Standard-jhat-Tool oder mit GUI-Anwendungen wie MAT bearbeitet werden.

    
Robert Höglund 23.08.2013 11:24
quelle
3

Ich habe hier einen Code, der programmgesteuert einen Heap-Dump über JMX ausführen kann:

Link: JmxHeapDumper .java

Die Kommentare im Quellcode enthalten 2 Links zu Artikeln, die nützliche Informationen zum Ablegen von Heap-Dumps enthielten. Ich weiß es nicht genau, aber wenn Sie Glück haben, könnte der JMX-Ansatz vielleicht eine Möglichkeit haben, den GC zu vermeiden. Hoffe das hilft!

    
Peter Thomas 13.08.2009 11:07
quelle
0

jProfiler ( ej-technologies ) kann dies tun.

    
Lawrence Dol 13.08.2009 05:21
quelle