2013-02-28 12 views
43

tworzę zrzut stosu przy użyciu poniżej polecenia:Jak analizować zrzutu sterty używając jmap w java

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

Otworzyłem wygenerowany plik - DumpFile.txt ale nie jest w czytelnej formie. Proszę więc dać mi znać, jak przeanalizować dane w wygenerowanym pliku.

+0

Czy próbowałeś 'jmap -heap > DumpFile.txt'? –

+0

ten plik otwiera się dobrze w Eclipse MAT, po prostu daj mu .hprof rozszerzenie – iTake

+0

Zobacz także http://stackoverflow.com/questions/185893/how-do-i-ananyzyz-a-hprof-file – rogerdpack

Odpowiedz

31

Można użyć jhat (Java sterty Analysis Tool) w celu zapoznania się z wygenerowanego pliku:

jhat [ options ] <heap-dump-file> 

Komenda jhat analizuje plik zrzutu sterty Java i uruchamia serwer WWW. jhat umożliwia przeglądanie zrzutów sterty za pomocą ulubionej przeglądarki internetowej.

Pamiętaj, że powinieneś mieć wyjście formatu binarnego hprof, aby móc je przeanalizować za pomocą jhat. Możesz użyć opcji format=b, aby wygenerować zrzut w tym formacie.

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

Uruchomiłem polecenie jhat do przeanalizuj plik zrzutu sterty, ale dostaję poniżej błędu: "Odczyt z 447start.out ... java.io.IOException: Nierozpoznana liczba magiczna: 1027423549 at com.sun.tools.hat.internal.parser.Reader.readFile (Reader.java:81) na com.sun.tools.hat.Main.main (Main.java:143) 'Tutaj 447start.out jest nazwą pliku dziennika. – Chaitanya

+0

Spróbuj zrzutu przy użyciu opcji 'format = b' w następujący sposób:' jmap -dump: format = b, file = ' –

+0

jhat nie jest raczej przyjaznym narzędziem –

9

Jeśli używasz Eclipse jako IDE polecam doskonałą zaćmienie wtyczki memory analyzer

Inną opcją jest użycie JVisualVM, można go czytać (i tworzenia) hałdy, wysypiska, jak również i jest dostarczany z każdym JDK. Możesz go znaleźć w katalogu bin twojego JDK.

+0

Dzięki temu pobieram oprogramowanie do analizy problemu. – Chaitanya

0

MAT, jprofiler, jhat są możliwe opcje. Ponieważ jhat jest dostarczany z jdk, możesz go łatwo uruchomić, aby przeprowadzić podstawową analizę. check this out

43

Powinieneś używać jmap -heap:format=b <process-id> bez żadnych ścieżek. Tworzy plik * .bin, który można otworzyć przy pomocy jvisualvm.exe (ta sama ścieżka co jmap). To doskonałe narzędzie do otwierania takich plików zrzutu.

5

VisualVm nie jest dostarczany z Apple JDK. Możesz użyć pakietu VisualVM Mac Application (dmg) jako oddzielnej aplikacji, aby to zrekompensować.

2

Bardzo późno, aby odpowiedzieć na to pytanie, ale warto rzucić okiem na niego. Zaledwie 2 minuty potrzebne do szczegółowego zrozumienia.

Najpierw należy utworzyć program java

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"); 
    } 
} 

Użyj JPS znaleźć vmid (maszyna wirtualna id tj JVM id)

Przejdź do polecenie cmd i wpisz poniżej Polecenia>

C:\>jps 
18588 Jps 
17252 GarbageCollectionAnalysisExample 
16048 
2084 Main 

17252 to vmid, którego potrzebujemy.

Teraz dowiemy się, jak korzystać z jmap i jhat

Używaj jmap - generowanie sterty zrzucić

Od docs java około jmap „drukuje jmap udostępnione mapy pamięci obiektu lub szczegółów pamięci stercie dany proces lub rdzeń plik lub zdalnym serwerem debug”

Zastosowanie następujące polecenie, aby wygenerować zrzut stosu>

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

Gdzie 17252 to vmid (wybrany z góry).

Heap wysypisko zostanie wygenerowany w E: \ heapDump.jmap

teraz używać Jhat Jhat służy do analizowania zrzut zbierania śmieci w Javie -

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. 

Domyślnie, to będzie uruchomić serwer hTTP na porcie 7000. Następnie udamy się do http://localhost:7000/

Dzięki uprzejmości JMAP, How to monitor and analyze the garbage collection in 10 ways

Powiązane problemy