2008-10-09 20 views
155

mam serwer produkcyjny uruchomiony z następującym flagi: - XX: + HeapDumpOnOutOfMemoryErrorJak analizować plik .hprof?

Ostatnia noc to wygenerowany plik java-38942.hprof gdy nasz serwer napotkał błąd sterty. Okazuje się, że twórcy systemu znali flagę, ale nie mogli uzyskać od niej żadnych użytecznych informacji.

Wszelkie pomysły?

Odpowiedz

156

Jeśli chcesz dość zaawansowane narzędzie zrobić jakiś poważny wywiercenie, spojrzeć na the Memory Analyzer project w Eclipse, przekazane im przez SAP.

Część tego, co można zrobić, to umysł blowingly dobre dla znalezienia wycieków pamięci itp - w tym prowadzenie postać ograniczona SQL (OQL) przeciwko obiektów w pamięci, tj

SELECT toString (firstName) Z com.yourcompany.somepackage.User

Całkowicie genialny.

+15

Chciałbym tylko dodać +100 dla Eclipse Memory Analyzer. Obecnie próbuję przesiać przez plik zrzutu sterty o wielkości 400mb +, a przeczytanie pliku zajęło jhat ponad 70 minut, zanim spowodowało ono pełną awarię maszyny JVM. EMA jest w stanie otworzyć go w <5 minut. –

+2

Szkoda, że ​​MAT często nie potrafi odczytać hałd ... :-( –

+2

Podczas otwierania plików HPROF za pomocą analizatora Eclipse Memory Analyzer (które w rzeczywistości również zostały zrzucone przez Eclipse!) Ciągle dostaję błędy parsowania. Niefortunne .. westchnienie. –

40

Możesz użyć JHAT, Narzędzia analizy stosu Java dostarczanego domyślnie z JDK. To jest linia poleceń, ale uruchamia serwer/przeglądarkę, której używasz do badania pamięci. Nie jest to najbardziej przyjazny dla użytkownika, ale przynajmniej jest już zainstalowany większość miejsc, do których pójdziesz. Bardzo przydatnym widokiem jest link "histogram sterty" na samym dole.

ex: jhat -port 7401 -J-Xmx4G dump.hprof

jhat może wykonać OQL "te dni", a także (na dole Link "wykonać OQL")

+2

Nie mogę zaakceptować Twojej odpowiedzi, dopóki nie zaktualizujesz linku. –

+0

Zrobione, przepraszam za literówkę. – CMS

+0

Najwyraźniej ustalenie odpowiedzi nie było wystarczającą pokutą, aby uspokoić pytającego ... – rogerdpack

9

Po prostu pobierz Eclipse Memory Analyzer. Nie ma nic lepszego i jest za darmo.

JHAT jest tylko nadające się do zastosowań „zabawka”

+3

JHAT jest niezbędny do zaimponowania hakerów "l33t", którzy ręcznie budują dystrybucję BSD zaczynając od LILO. Czekaj ... nigdy nie używaliby java :-) –

+0

Myślę, że to raczej komentarz ...: \ – rogerdpack

28

Można również użyć HeapWalker z NetBeans Profiler lub Visual VM autonomiczny narzędzia. Visual VM jest dobrą alternatywą dla JHAT, ponieważ jest samodzielny, ale jest o wiele łatwiejszy w użyciu niż JHAT.

Potrzebujesz Java 6+, aby w pełni korzystać z Visual VM.

+0

Powinieneś dodać notatkę, że dotyczy tylko Java 6 i 7. –

+0

AFAIK, HeapWalker i VisualVM nie wymagają Java 6/7 do odczytywania plików HPROF. –

+0

Po prostu próbowałem załadować ją przy użyciu Java 5 i napisałem "Proszę użyć Java 6 lub 7" Co robię źle? –

7

Wydaje się, że Twój Profiler Java obsługuje je również.