2012-02-06 12 views
18

Podejrzewam, że mamy poważny wyciek pamięci w naszym mostku połączenia ActiveMQ - widzimy typowe wzorce wycieków pamięci (aplikacja ładuje się dobrze, zwalnia, jeśli działa przez dłuższy czas lub jest restartowana w kółko przez krótkie okresy czasu). Poszukałem najlepszych sprawdzonych metod znajdowania wycieków pamięci Java i wielu programistów rezygnuje z tradycyjnych narzędzi, takich jak jhat/jmap zamiast nowego (er) jvisualvm.Jak znaleźć wycieki pamięci za pomocą visualvm

Po uruchomieniu tego narzędzia (i spędzeniu kilku godzin na zapoznaniu się z jego samouczkiem), jestem w stanie wykonać migawki profilera dla procesora i pamięci.

Po prostu utknąłem w tym punkcie - jak analizować te migawki, aby zidentyfikować wyciek? Istnieje mnóstwo dokumentacji tam, w jaki sposób używać jvisualvm do tworzenia migawek, ale bardzo mało dokumentacji, jak je właściwie zrozumieć.

Z góry dziękuję.

+0

Czy próbowałeś działa [FindBugs] (http : // findbugs.sourceforge.net) nad źródłem? Uważam, że jest to dość skuteczne w identyfikacji kodu, który może spowodować wycieki pamięci. – Jivings

+0

Dzięki za sugestię - ale dwie rzeczy: (1) Ciągle mi powtarzano, że FindBugs jest dobre dla NullPointerExceptions, ale nie przecieki pamięci i, co ważniejsze, (2) naprawdę chcę zapoznać się z jvisualvm, więc chyba że jest to * wyraźnie * nie jest właściwym narzędziem do tej pracy, jestem zainteresowany, aby zobaczyć, jak jest on używany jako narzędzie diagnostyczne. Jeszcze raz dziękuję za dobrą sugestię! – IAmYourFaja

+2

Jedna mała rzecz: Narzędzia/Wtyczki/Dostępne wtyczki - zainstaluj Visual GC - wtyczka pokazuje lepszy wykres twojej pamięci sterty i statusu GC. – coolcfan

Odpowiedz

23

Analizowanie wycieku pamięci za pomocą funkcji visualvm nie jest takie proste. Ma narzędzie/plugin o nazwie "sampler". Można to wykorzystać do wypróbowania pamięci lub procesora. Możesz robić migawki w regularnych odstępach czasu i szukać ewentualnych wycieków. Oto kilka szczegółowych informacji o tym, jak go używać - Otrzymane od quick search

Bardziej skutecznym sposobem będzie uzyskanie zrzutu sterty (powiedzmy, gdy aplikacja zwolniła lub gdy OOM happens). VisualVM pomóc podjąć heapdump (używając zrzut stosu na Monitorze Tab)

Plik ten może być analizowane przez MAT - Niektóre szczegóły są tutaj na How do I analyze a .hprof file? i http://memoryanalyzer.blogspot.in/

+0

MAT może również wykonać zrzut sterty bez VisualVM – Chin

Powiązane problemy