Виртуальная машина Java (JVM) генерирует 3 критических артефакта, полезных для оптимизации производительности и устранения неполадок в работе. Эти артефакты:

  1. Журнал сборки мусора (GC)
  2. Дамп потока
  3. Дамп кучи

1. Журнал сбора мусора

а) Что такое журнал GC?

Журнал сборщика мусора содержит информацию, связанную с событиями сборки мусора. В нем будет указано, сколько было запущено событий GC, к какому типу относится эта команда, эта команда событий GC (т.е. Young GC или Full GC), как долго каждое событие GC приостанавливает приложение, сколько объектов восстанавливает каждое событие GC.

б) Как выглядит журнал GC?

Образец файла журнала сбора мусора можно найти здесь.

c) Где используются журналы GC?

Журналы сбора мусора используются для изучения производительности сборщика мусора и памяти приложения. Он используется для оптимизации времени пауз сборщика мусора, для определения оптимального размера памяти для вашего приложения, а также для устранения неполадок, связанных с памятью.

г) Как создать журнал GC?

Вы можете создать журналы сборки мусора, передав следующие аргументы JVM:

В версиях Java до 8:

В версии Java, начиная с 9:

путь к файлу: это место, где будет записан файл журнала сборки мусора.

e) Как понимать журнал GC?

Формат журнала сбора мусора зависит от того, кто является вашим поставщиком JVM (Oracle, HP, IBM, Azul, ..), версии Java (1.5, 5, 6, 7, 8, 9, 10, 11, 12,…), мусора алгоритм сбора (Serial, Parallel, CMS, G1, Shenandoah, Z GC) и аргументы JVM, которые вы передаете. Таким образом, не существует единого стандартизированного формата. Однако вот видеоруководство, которое пытается помочь вам понять формат файла журнала GC.

f) Какие инструменты используются для анализа журнала GC?

Существует несколько инструментов анализа журнала сбора мусора. Некоторые из популярных приведены здесь: GCeasy, IBM GC & Memory visualizer, HP JMeter, Google Garbage Cat.

2. Дамп потока

а) Что такое дамп потока?

Дамп потока — это моментальный снимок всех потоков, запущенных в приложении в определенный момент времени. Он содержит всю информацию о каждом потоке в приложении, такую ​​как состояние потока, идентификатор потока, собственный идентификатор, имя потока, трассировка стека и приоритет.

б) Как выглядит дамп потока?

Образец дампа потока можно найти здесь.

c) Где используется дамп потока?

Дампы потоков в основном используются для устранения производственных проблем, таких как скачки ЦП, зависание приложения, плохое время отклика, зависшие потоки, высокое потребление памяти.

г) Как создать дамп потока?

Дампы потоков могут быть захвачены из работающего приложения с использованием 8 различных опций. Самый распространенный способ получить дамп потока — использовать инструмент jstack. Инструмент jstack поставляется в папке JDK_HOMEbin. Вот команда, которую вам нужно выполнить для захвата дампа потока:

pid: это идентификатор процесса приложения, дамп потока которого должен быть захвачен.

путь к файлу: путь к файлу, в который будет записан дамп потока.

д) Как понять дамп потока?

Вот видео-доклад, который дает хороший подробный обзор того, как понимать дампы потоков.

f) Какие инструменты используются для анализа дампа потока?

Вот наиболее широко используемые инструменты анализа дампа потока: fastThread, Samurai, анализатор IBM Thread & Monitor, Visual VM.

3. Дамп кучи

а) Что такое дамп кучи?

Дамп кучи — это моментальный снимок памяти вашего приложения в определенный момент времени. Он содержит такую ​​информацию, как объекты в памяти, какие значения они несут, каков их размер, на какие другие объекты они ссылаются.

б) Как выглядит дамп кучи?

Образец дампа кучи можно найти здесь. (Примечание: он будет в двоичном формате, так что вы на самом деле не сможете его прочитать).

c) Где используется дамп кучи?

Дампы кучи в основном используются для устранения неполадок, связанных с памятью, OutOfMemoryError.

г) Как создать дамп кучи?

Дамп кучи может быть получен из работающего приложения с использованием 7 различных опций. Самый распространенный способ сделать дамп кучи — использовать инструмент jmap. Инструмент jmap поставляется в папке JDK_HOMEbin. Вот команда, которую вам нужно выполнить для захвата:

pid: это идентификатор процесса Java, дамп кучи которого должен быть захвачен

путь к файлу: это путь к файлу, в который будет записан дамп кучи.

e) Как понимать дамп кучи?

Файлы дампа кучи имеют двоичный формат и обычно имеют большой размер. Кроме того, в их формате сильно не хватает документации. Таким образом, вы должны использовать инструменты анализа дампа кучи (данные в следующем вопросе), чтобы проанализировать и понять их.

f) Какие инструменты используются для анализа дампа кучи?

Вот наиболее широко используемые инструменты анализа дампа кучи: Eclipse MAT, HeapHero, JVisualVM.
Мы надеемся, что эта статья охватывает все методы анализа журналов сборки мусора, дампов потоков и дампов кучи. Если вы нашли эту статью действительно полезной для себя, пожалуйста, поделитесь этой информацией со своими друзьями, родственниками, семьей и другими людьми. Увидимся в следующих постах с signalfix.net!