JMAP i JSTack dla początkujących

JMAP i JSTack dla początkujących
JMAP i JSTack są prawdopodobnie najcenniejszymi narzędziami w zestawie narzędzi każdego dewelopera Java. Dzięki funkcjonalności obu tych narzędzi można połączyć, możesz debugować problemy i uruchomić diagnostykę programu Java, który kodujesz. Jako najbardziej fundamentalna para narzędzi do debugowania, ważne jest, abyś wiedział, jak z nimi pracować.

To będzie samouczek na temat JMAP i JSTack narzędzi w Javie dla początkujących. Zanim skończysz z tym samouczkiem, będziesz miał lepszy pojęcie o tym, jak te dwa narzędzia mogą pomóc w rozwiązywaniu problemów i debugowaniu.

Uruchomienie diagnostyki z JSTACK

JSTACK to w istocie to narzędzie wiersza poleceń używana w rozwiązywaniu problemów. Dzięki JSTack możesz mieć zrzuty wątków dla określonych programów, procesów lub plików podstawowych Java, aby zidentyfikować problemy. To z kolei ujawnia więcej szczegółów, takich jak nazwa pełnej klasy, nazwa metody, numer wiersza elementu i indeks bajtowy. JSTack pozwala zobaczyć, jakie działanie podejmuje każda linia kodu podczas uruchamiania programu.

Uruchomienie diagnostyki jest tym, do czego najczęściej jest używane JSTACK. Zastosujesz polecenie JSTACK do określonego pliku/ procesu podstawowego i zgłasza każdy wątek połączony z JVM (dołączone wewnętrzne wątki VM), a także oryginalne ramki stosu. Oprócz tego JSTack może również zidentyfikować nakładanie się zasobów (impas), aby rozwiązywać problem z programem. Funkcje te pozwalają użytkownikom pozbyć się potrzeby polegania na jakimkolwiek innym narzędziem, aby wykonać pełną diagnozę, aby zrezygnować z wszelkich błędów lub błędów w programie.

Prowadzenie zrzutu stosu

Jeśli program nie reaguje lub utknie proces, możesz wskazać dokładny źródło problemu, uruchamiając zrzut stosu. Jest to szczególnie przydatne, gdy Procesid Jstack również nie reaguje.

Typowy zrzut stosu powinien przypominać zawartość poniżej:

Pobrać ślady z zrzutów rdzenia

Jeśli nie znasz zrzutów podstawowych, są to zrzuty pamięci, które przechowują dziennik plików lub programów, dokumentując ich zawartość i stan w określonym czasie, zazwyczaj, gdy problem ma niespotykaną awarię. Zrzuty podstawowe są dość elastyczne pod względem zawartości, którą mogą pomieścić: i mogą być bardzo szczegółowe dla poszczególnych aplikacji.

Aby wyodrębnić ślady stosu z zrzutu rdzenia, wpisz poniższe polecenie:

$ Jstack $ java_home/bin/java Core

Mieszany stos

Często napotykasz błędy, które są zbyt duże, aby można je było utożsamiać same stosy Java. Tutaj musisz podciągnąć rodzime ramy stosu i zobaczyć te ze stosami Java. Ramki rodzime są generowane przy użyciu języka C/C ++, które mogą być ratunkiem, jeśli chodzi o uruchamianie diagnostyki.

Aby wydrukować natywne stosy, użyj polecenia -M, jak pokazano poniżej:


Identyfikacja wycieków z narzędziami JMAP

Jako nadchodzący deweloper Java (założę, że nadal jesteś nowicjuszem, dlaczego inaczej byłbyś w samouczku JMAP?), będziesz prowadzić diagnostykę znacznie częściej, niż możesz sobie wyobrazić. Problemy mogą przybierać kształt bałaganu pamięci, manifestując się jako stale gromadzą się stercie, które nie znika tak łatwo, a może jako opóźnienie w uwalnianiu arraylist.

Aby zrównoważyć te przesunięcia, najpierw zidentyfikujesz te wycieki przed ich naprawieniem. Najsilniejszym narzędziem, które masz do dyspozycji w tym zakresie, jest narzędzie JMAP. Narzędzie JMAP łagodzi problem, rejestrując rozmiar i status gromadzenia się sterty.

W ten sposób będziesz używać polecenia JMAP podczas wybierania wycieków.

-Polecenie sterty

Polecenie -Heap szczegółowo ujawnia informacje o stercie. Na przykład możesz uzyskać informacje dotyczące algorytmów GC, dopracowując szczegóły dotyczące każdego wątku zaangażowanego w dowolny z jego procesów. Możesz także zobaczyć raporty z użycia haP, a także w dość drobnych szczegółach. JMAP ujawni informacje na temat pojemności cieplnej i obecnie dostępnej pamięci, gdy zostanie wyświetlony monit o generowanie raportów LAP.

Histogram sterty

Aby lepiej wizualizować raporty przedstawione JMAP, można stworzyć histogram. W tym celu masz opcję -Histo, która drukuje histogram plik rdzenia procesora Java. Po zastosowaniu do procesu działającego zobaczysz rozmiar pamięci w bajtach, ile obiektów je zajmuje, z ich nazwami klas.

$ Jmap -histo \/java/re/javase/6/najnowsze/binarie/solaris -sparc/bin/java Core.27421

Zanim się zakończymy:

Musimy o tym porozmawiać Stałe statystyki generacji. W Javie stałe pokolenie jest częścią sterty, która zawiera wszystkie drobiazgi maszyny wirtualnej. Między innymi zawiera szczegóły dotyczące metody i obiektów klasowych. Szczegóły te obejmują dokładną liczbę klas, liczbę bajtów w służbie dla każdego ładowarki klasowej, adres ładowarki klasy, a także adres ładowarki dla rodziców oraz wskazanie, czy program będzie przechowywany, czy wysyłany do śmieci Kolekcja później.

W podsumowaniu

Teraz, gdy wiesz, jak korzystać z JSTACK i JMAP, masz do dyspozycji dwa najważniejsze narzędzia do rozwiązywania problemów. Ten samouczek ilustruje, w jaki sposób możesz zidentyfikować korzenie różnych problemów w swoim programie, ujawniając stosy i natywne wątki. Omówiliśmy również, jak naprawić wycieki sterty za pomocą JMAP.

To wszystko na tę lekcję. Do następnego razu.