Mam serwer produkcyjny z następującą flagą: - XX: + HeapDumpOnOutOfMemoryError
Ostatniej nocy wygenerował plik java-38942.hprof, gdy nasz serwer napotkał błąd sterty. Okazuje się, że twórcy systemu wiedzieli o fladze, ale nie ma sposobu, aby uzyskać z niej użyteczne informacje.
Jakieś pomysły?
Możesz użyć JHAT , Java Heap Analysis Tool dostarczanego domyślnie z JDK. Jest to wiersz poleceń, ale uruchamia serwer WWW / przeglądarkę, której używasz do badania pamięci. Nie jest najbardziej przyjazny dla użytkownika, ale przynajmniej jest już zainstalowany w większości miejsc, do których pojedziesz. Bardzo przydatnym widokiem jest link „histogram sterty” na samym dole.
dawny:
jhat -port 7401 -J-Xmx4G dump.hprof
jhat
może również wykonywać OQL „w tych dniach” (dolny link „wykonaj OQL”)źródło
Możesz także użyć HeapWalker z Netbeans Profiler lub autonomicznego narzędzia Visual VM . Visual VM jest dobrą alternatywą dla JHAT, ponieważ jest samodzielny, ale jest znacznie łatwiejszy w użyciu niż JHAT.
Potrzebujesz Java 6+, aby w pełni korzystać z Visual VM.
źródło
jvisualvm.exe
wJAVASDK/bin
folderzePo prostu pobierz Eclipse Memory Analyzer . Nie ma nic lepszego i jest za darmo.
JHAT nadaje się tylko do „zabawek”
źródło
Wygląda na to, że YourKit Java Profiler też je obsługuje.
źródło
Jeśli chcesz wykonać niestandardową analizę zrzutu, możesz:
Ta biblioteka jest szybka, ale musisz napisać kod analizy w Javie.
Z dokumentów:
źródło
Osobiście wolę VisualVM. Jedną z funkcji, które lubię w VisualVM, jest porównywanie zrzutów sterty. Podczas przeprowadzania analizy zrzutu stosu istnieje wiele sposobów, aby dowiedzieć się, co spowodowało awarię. Jednym ze sposobów, które uznałem za przydatne, jest porównanie zdrowych i niezdrowych zrzutów sterty.
Oto kroki, które możesz w tym celu wykonać:
link: https://visualvm.github.io
źródło