2013-02-28 3 views
43

ich Heapdump erschaffe unter Befehl:Wie die Heapdump mit jmap in Java analysieren

jmap -dump:file=DumpFile.txt <process-id> 

Ich habe die erzeugte Datei geöffnet - DumpFile.txt aber es ist nicht in lesbarer Form. Bitte lassen Sie mich wissen, wie Sie die Daten in der generierten Datei analysieren.

+0

Haben Sie 'jmap -heap > DumpFile.txt probiert? –

+0

Diese Datei öffnet sich in Eclipse MAT, geben Sie es .hprof Erweiterung – iTake

+0

Siehe auch http://stackoverflow.com/questions/185893/how-do-i-analyze-a-hprof-file – rogerdpack

Antwort

31

Sie können jhat (Java Heap Analysis Tool) verwenden, um die erzeugte Datei zu lesen:

jhat [ options ] <heap-dump-file> 

Der jhat Befehl analysiert eine Java Heap Dump-Datei und startet einen Webserver. jhat ermöglicht das Durchsuchen von Heap Dumps mit Ihrem bevorzugten Webbrowser.

Beachten Sie, dass Sie eine hprof Binärformatausgabe haben sollten, um es mit jhat analysieren zu können. Sie können die Option format=b verwenden, um den Speicherauszug in diesem Format zu generieren.

-dump:format=b,file=<filename> 
+0

Ich führte den Jhat-Befehl zu Analysiere die Heap-Dump-Datei, aber ich bekomme unten Fehler: 'Lesen von 447start.out ... java.io.IOException: Unbekannte magische Zahl: 1027423549 bei com.sun.tools.hat.internal.parser.Reader.readFile (Reader.java:81) bei com.sun.tools.hat.Main.main (Main.java:143) 'Hier 447start.out ist der Name der Protokolldatei. – Chaitanya

+0

Versuchen Sie, dump mit 'format = b 'Option wie folgt:' jmap -dump: format = b, Datei = ' –

+0

jhat ist eher kein benutzerfreundliches Tool –

9

Wenn Sie Eclipse als IDE verwenden würde ich die ausgezeichneten Eclipse empfehlen Plugin memory analyzer

Eine weitere Option ist jvisualvm zu verwenden, kann es lesen (und erstellen) Heap als auch Dumps, und wird mit jedem ausgeliefert JDK. Sie finden es im bin-Verzeichnis Ihres JDK.

+0

Danke Ich lade die Software herunter, um das Problem zu analysieren. – Chaitanya

0

MAT, jprofiler, jhat sind mögliche Optionen. Da jhat mit jdk geliefert wird, können Sie es einfach starten, um eine grundlegende Analyse durchzuführen. check this out

43

Sie sollten jmap -heap:format=b <process-id> ohne Pfade verwenden. Es erstellt also eine * .bin Datei, die Sie mit jvisualvm.exe (gleicher Pfad wie jmap) öffnen können. Es ist ein großartiges Werkzeug, um solche Dump-Dateien zu öffnen.

5

VisualVm wird nicht mit Apple JDK geliefert. Sie können das VisualVM Mac Application Bundle (dmg) als separate Anwendung verwenden, um das auszugleichen.

2

Sehr spät, um dies zu beantworten, aber es lohnt sich, einen kurzen Blick darauf zu werfen. Nur 2 Minuten benötigt, um im Detail zu verstehen.

Erstellen Sie zunächst dieses Java-Programm

import java.util.ArrayList; 
import java.util.List; 

public class GarbageCollectionAnalysisExample{ 
    public static void main(String[] args) { 
      List<String> l = new ArrayList<String>(); 
      for (int i = 0; i < 100000000; i++) { 
        l = new ArrayList<String>(); //Memory leak 
        System.out.println(l); 
      } 
      System.out.println("Done"); 
    } 
} 

Verwenden JPS die vmid (virtuelle Maschine id dh JVM id)

Go zu finden unter Befehle>

C:\>jps 
18588 Jps 
17252 GarbageCollectionAnalysisExample 
16048 
2084 Main 
CMD und geben Sie

17252 ist das vmid, das wir brauchen.

Jetzt werden wir lernen, wie man jmap verwenden und

Verwenden jmap jhat - Haufen von

aus Java-Dokumentation über jmap „jmap druckt gemeinsam genutztes Objekt-Speicherkarten oder Heap-Speicher Details zu erzeugen Dump eine bestimmte Prozess oder Core-Datei oder ein Remote-Debug-Server“

Verwenden folgender Befehl Heapdump zu generieren>

C:\>jmap -dump:file=E:\heapDump.jmap 17252 
Dumping heap to E:\heapDump.jmap ... 
Heap dump file created 

Wo 17252 ist das vmid (von oben ausgewählt).

Heap Dump wird in E erzeugt werden: \ heapDump.jmap

Jetzt jhat jhat zur Analyse des Garbage-Collection-Dump in Java verwendet wird, verwenden -

C:\>jhat E:\heapDump.jmap 
Reading from E:\heapDump.jmap... 
Dump file created Mon Nov 07 23:59:19 IST 2016 
Snapshot read, resolving... 
Resolving 241865 objects... 
Chasing references, expect 48 dots................................................ 
Eliminating duplicate references................................................ 
Snapshot resolved. 
Started HTTP server on port 7000 
Server is ready. 

standardmäßig wird es http-Server auf Port starten 7000. Dann gehen wir zu http://localhost:7000/

Courtesy: JMAP, How to monitor and analyze the garbage collection in 10 ways

Verwandte Themen