2012-09-12 10 views
7

Mam duży (5 GB) zrzut hprof, utworzony przez aplikację, gdy wystąpiło OutOfMemoryError. (Przy użyciu XX: HeapDumpOnOutOfMemoryError).Czy jest możliwe wyświetlanie wątków z dump/wątków hprof w zrzucie sterty

Niestety, nie ma żadnych dzienników zebranych po wystąpieniu tego błędu. Ponowne utworzenie tego zajmie kilka godzin. Miałem nadzieję, że niektóre narzędzia mogą pokazać ślad stosu wyjątku lub wszystkie stosy wątków itp. Z hprof.

Obecnie używam MAT, nie widzę sposobu, aby uzyskać informacje o wątku. Z którego narzędzia mogę skorzystać?

(Nie jestem pewien, czy plik hprof zawiera informacje o wątku/lokalizacji połączenia, gdy wystąpił OOM).

(wiem, w jaki sposób podjąć wątek zrzutu w normalnych przypadkach. Problem jest tu impreza już się stało, wszystko co mam jest wysypisko hprof.)

+1

Spróbuj VisualVM (http://docs.oracle.com/javase/6/docs/technotes/guides/visualvm/threads .html) –

+0

Zrzut sterty nie zawiera informacji o wątkach. Powinieneś spojrzeć na zrzut wątku. – SiB

+0

@ RC. tak, załadowany hprof przy użyciu VisualVM i ma opcję wyświetlania zrzutu wątków. Czy możesz oznaczyć jako odpowiedź? – Jayan

Odpowiedz

3

MAT może show the threads directly now (być może został dodany, ponieważ pytanie zostało zadane).

Tematy ogólne

Aby otrzymać przegląd wszystkich wątków w wysypisko sterty użyć „Przegląd wątku” przycisk w pasku narzędzi, jak pokazano na rysunku. Alternatywnie można użyć Query Browser> Wątek Przegląd i stosy zapytanie:

screenshot of toolbar icon

+0

!! W końcu faktyczna odpowiedź na moje pytanie :) – Jayan

0

Nie sądzę zrzut stosu zawiera informacje wątek z wyjątkiem głównego GC. Jeśli potrzebujesz informacji związanych z wątkiem, musisz również zrzucić zrzut wątku.

0

Eclipse MAT pozwala zobaczyć podejrzane wątki w raporcie o podejrzanych wyciekach. Poszukaj klas w obszarze nazw aplikacji z ich numerami linii, aby dowiedzieć się, ile pamięci zajmują w stercie. To da ci wskazówkę nieszczelnych klas.

0

Możesz zabić -3 identyfikator procesu, aby uzyskać zrzut wątku do standardowego wyjścia. To nie zabije procesu java, więc możesz to zrobić tyle razy, ile chcesz.

jako RC stwierdził, że visualVM jest dobrym narzędziem, które daje liczbę obiektów według typu klasy oraz wszystkich rodzajów wykresów i narzędzi profilujących.

0

Użyj visualvm.

spróbować przeanalizować wykres gdy przestrzeń sterty przekracza dop ... u należy również sprawdzić próbki pamięci & zapisać swój migawkę ..

Analiza stosu wątku ... pomoże w zawężeniu do problemu .

11

Odpowiadając na własne pytanie. Kredyt trafia do @ RC

  1. Otwórz zrzut za pomocą visualvm. To zajmuje chwilę.
  2. kliknięcie na „wątków w stercie dump”

visual vm with threads at heapdump

+0

http://stackoverflow.com/a/11903624/173149 mówią, że jest to "nowa" cecha formatu zrzutu sterty (z 2010 r.). – gavenkoa

+1

Długo to była odpowiedź. Teraz MAT poprawił raportowanie. Zobacz odpowiedź od @matt b: http://stackoverflow.com/questions/12381534/is-it-possible-to-view-threads-from-hprof-dump-threads-in-heap -dump/41243806 # 41243806 – Jayan

-1

Aby włączyć opcję swoje potrzeby + i wyłączyć opcję trzeba -

Co jest mylące o dokumentacja jest pokazuje domyślne ustawienie, aby "wyczyścić" to, jakie ustawienie już masz. Te z + są domyślnie włączone, a te z - są domyślnie wyłączone. Oznacza to, że jeśli skopiujesz którąkolwiek z opcji + lub - z dokumentacji, nie powinieneś nic robić (z wyjątkiem sytuacji, gdy domyślna wartość zmieniła się z upływem czasu).

-XX: -HeapDumpOnOutOfMemoryError wyłącza zrzut sterty, który jest domyślny.

-XX: + HeapDumpOnOutOfMemoryError włącza zrzut sterty.

Powiązane problemy