Java Virtual Machine (JVM) generuje 3 krytyczne artefakty, które są przydatne do optymalizacji wydajności i rozwiązywania problemów produkcyjnych. Te artefakty to:

  1. Dziennik zbierania śmieci (GC)
  2. Zrzut wątku
  3. Zrzut stosu

1. Dziennik zbierania śmieci

a) Co to jest dziennik GC?

GC Log zawiera informacje związane ze zdarzeniami garbage collection. Wskaże, ile zdarzeń GC zostało uruchomionych, jakiego typu to polecenie to polecenie zdarzeń GC (tj. Young GC lub Full GC), jak długo każde zdarzenie GC wstrzymało aplikację, ile obiektów odzyskało każde zdarzenie GC.

b) Jak wygląda dziennik GC?

Przykładowy plik dziennika zbierania śmieci można znaleźć tutaj.

c) Gdzie są używane dzienniki GC?

Dzienniki wyrzucania śmieci służą do badania wydajności GC i pamięci aplikacji. Służy do optymalizacji czasów przerwy GC, służy do identyfikowania optymalnego rozmiaru pamięci dla aplikacji, jest również używany do rozwiązywania problemów związanych z pamięcią.

d) Jak wygenerować dziennik GC?

Możesz generować dzienniki wyrzucania elementów bezużytecznych, przekazując następujące argumenty JVM:

W wersjach Java do 8:

W wersji Java od 9:

file-path: to lokalizacja, w której zostanie zapisany plik dziennika Garbage Collection.

e) Jak zrozumieć dziennik GC?

Format dziennika zbierania śmieci różni się w zależności od dostawcy JVM (Oracle, HP, IBM, Azul, ..), wersji Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), śmieci algorytm zbierania (Serial, Parallel, CMS, G1, Shenandoah, Z GC) i argumenty JVM, które przekazujesz. W związku z tym nie jest dostępny jeden znormalizowany format. Jednak tutaj jest samouczek wideo, który próbuje pomóc Ci zrozumieć format pliku dziennika GC.

f) Jakie narzędzia są używane do analizy dziennika GC?

Istnieje wiele narzędzi do analizy dzienników zbierania śmieci. Oto niektóre z popularnych: GCeasy, IBM GC & Memory Visualizer, HP JMeter, Google Garbage Cat

2. Zrzut wątku

a) Co to jest zrzut wątku?

Zrzut wątku to migawka wszystkich wątków działających w aplikacji w danym momencie. Zawiera wszystkie informacje o każdym wątku w aplikacji, takie jak stan wątku, identyfikator wątku, identyfikator natywny, nazwa wątku, ślad stosu i priorytet.

b) Jak wygląda zrzut wątku?

Przykładowy zrzut wątku można znaleźć tutaj.

c) Gdzie jest używany zrzut wątku?

Zrzuty wątków są używane głównie do rozwiązywania problemów produkcyjnych, takich jak skoki procesora, brak odpowiedzi w aplikacji, słaby czas odpowiedzi, zawieszone wątki, wysokie zużycie pamięci.

d) Jak wygenerować zrzut wątku?

Zrzuty wątków można przechwytywać z uruchomionej aplikacji przy użyciu 8 różnych opcji. Najczęstszą opcją wykonania zrzutu wątków jest użycie narzędzia „jstack”. Narzędzie jstack jest dostarczane w folderze JDK_HOMEbin. Oto polecenie, które musisz wydać, aby przechwycić zrzut wątku:

pid: to identyfikator procesu aplikacji, której zrzut wątku powinien zostać przechwycony

ścieżka do pliku: jest ścieżką do pliku, w którym zostanie zapisany zrzut wątku.

e) Jak zrozumieć zrzut wątku?

Oto rozmowa wideo, która daje dobry szczegółowy przegląd tego, jak zrozumieć zrzuty wątków.

f) Jakie narzędzia są używane do analizy zrzutu wątku?

Oto najczęściej używane narzędzia do analizy zrzutów wątków: fastThread, Samurai, analizator IBM Thread & Monitor, Visual VM

3. Zrzut stosu

a) Co to jest zrzut sterty?

Zrzut sterty to migawka pamięci aplikacji w określonym momencie. Zawiera informacje, takie jak, jakie są obiekty w pamięci, jakie wartości niosą, jaki jest ich rozmiar, do jakich innych obiektów się odwołują.

b) Jak wygląda zrzut sterty?

Przykładowy zrzut stosu można znaleźć tutaj. (Uwaga: będzie w formacie binarnym. Więc właściwie nie możesz go przeczytać).

c) Gdzie jest używany zrzut hałdy?

Zrzuty sterty są używane głównie do rozwiązywania problemów związanych z pamięcią, OutOfMemoryError.

d) Jak wygenerować zrzut sterty?

Zrzut sterty można przechwycić z uruchomionej aplikacji przy użyciu 7 różnych opcji. Najczęstszą opcją wykonania zrzutu stosu jest użycie narzędzia jmap. Narzędzie jmap dostarczane jest w folderze JDK_HOMEbin. Oto polecenie, które musisz wydać, aby przechwycić:

pid: to identyfikator procesu Java, którego zrzut stosu powinien zostać przechwycony

ścieżka do pliku: jest ścieżką do pliku, w którym zostanie zapisany zrzut sterty.

e) Jak zrozumieć zrzut sterty?

Pliki zrzutu sterty są w formacie binarnym i zwykle mają duży rozmiar. Poza tym w ich formacie bardzo brakuje dokumentacji. Dlatego musisz użyć narzędzi do analizy stosu (podane w następnym pytaniu), aby je przeanalizować i zrozumieć.

f) Jakie narzędzia są używane do analizy zrzutu stosu?

Oto najczęściej używane narzędzia do analizy zrzutów sterty: Eclipse MAT, HeapHero, JVisualVM.
Mamy nadzieję, że ten artykuł obejmuje wszystkie metody analizy dzienników zbierania śmieci, zrzutów wątków i zrzutów sterty. Jeśli uważasz, że ten artykuł był dla Ciebie naprawdę pomocny, podziel się tą informacją ze znajomymi, krewnymi, rodziną i innymi osobami. Do zobaczenia w kolejnych postach z signalfix.net!