Серия jvm: анализ Java GC

Java задняя часть JVM алгоритм

Сборщик мусора Java — это регистратор JVM, отображающий производительность каждого раздела JVM.

Что такое Java GC

Механизм Java GC (Garbage Collection, Garbage Collection, Garbage Collection) является одним из основных отличий между Java и C++/C. Как разработчику Java, вам, как правило, не нужно писать специальный код очистки памяти и очистки мусора, и это не нужно иметь дело с проблемами утечки и переполнения памяти, и вам не нужно быть таким же осторожным, как программист на C. Это связано с тем, что в виртуальной машине Java есть механизм автоматического управления памятью и очистки мусора. В двух словах, этот механизм маркирует память в JVM (Java Virtual Machine) и определяет, какую память необходимо высвобождать.Согласно определенной стратегии высвобождения, память высвобождается автоматически, а память в JVM гарантированно никогда не освобождается. stop (Nerver Stop).space для предотвращения утечек памяти и проблем с переполнением.

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

Подводя краткий итог, сборщик мусора Java должен перерабатывать невыжившие объекты через сборщик мусора, чтобы обеспечить более эффективную работу JVM. Если вы не понимаете алгоритм GC и сборщик мусора, вы можете обратиться к этой статье:Серия JVM (3): сборщик мусора алгоритма GC.

Как получить журналы Java GC

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

динамический вид команды

Команда автоматической строки инструментов Java, jstat может использоваться для динамического мониторинга использования памяти JVM и статистической информации о сборе мусора.

Например, общие команды,jstat -gcСтатистическое поведение кучи сборки мусора

$ jstat -gc 1262
 S0C    S1C     S0U     S1U   EC       EU        OC         OU        PC       PU         YGC    YGCT    FGC    FGCT     GCT   
26112.0 24064.0 6562.5  0.0   564224.0 76274.5   434176.0   388518.3  524288.0 42724.7    320    6.417   1      0.398    6.815

Также можно установить интервалы печати в фиксированное время:

$ jstat -gc 1262 2000 20

Эта команда означает вывод 1262 условий gc каждые 2000 мс, всего 20 раз.

Подробнее см. в этой статье:Серия JVM (4): настройка JVM — команды

параметры ГХ

Основные параметры журнала сборщика мусора JVM включают следующее:

  • -XX:+PrintGCвывод журнала сборщика мусора
  • -XX:+PrintGCDetailsВывести подробный журнал GC
  • -XX:+PrintGCTimeStampsОтметка времени вывода GC (в виде базового времени)
  • -XX:+PrintGCDateStampsВывести временную метку сборщика мусора (в виде даты, например 2017-09-04T21:53:59.234+0800)
  • -XX:+PrintHeapAtGCРаспечатайте информацию о куче до и после GC
  • -Xloggc:../logs/gc.logвыходной путь файла журнала

В производственной среде настройте соответствующие параметры, необходимые для отслеживания рабочего состояния JVM.

Пример настройки Tomcat

Мы часто добавляем параметры, связанные с JVM, в параметры запуска tomcat, вот типичный пример:

JAVA_OPTS="-server -Xms2000m -Xmx2000m -Xmn800m -XX:PermSize=64m -XX:MaxPermSize=256m -XX:SurvivorRatio=4
-verbose:gc -Xloggc:$CATALINA_HOME/logs/gc.log 
-Djava.awt.headless=true 
-XX:+PrintGCTimeStamps -XX:+PrintGCDetails 
-Dsun.rmi.dgc.server.gcInterval=600000 -Dsun.rmi.dgc.client.gcInterval=600000
-XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15"

Давайте проанализируем параметры выше:

  • -Xms2000m -Xmx2000m -Xmn800m -XX:PermSize=64m -XX:MaxPermSize=256m
    Xms — начальный размер кучи JVM при запуске jvm, Xmx — максимальный размер кучи jvm, xmn — размер нового поколения, permsize — начальный размер постоянного поколения, а MaxPermSize — максимальное пространство постоянного поколения.

  • -XX:SurvivorRatio=4
    SurvivorRatio — это отношение размера области Эдема в пространстве новой генерации к площади выживших в пространстве спасения.Значение по умолчанию равно 8, тогда соотношение двух областей выживших к одной области Эдема составляет 2:8, а одного выжившего области приходится 1/10 всего молодого поколения. Уменьшение этого параметра увеличит область выживания, позволит объектам оставаться в области выживания как можно дольше и уменьшит количество объектов, попадающих в старое поколение. Идея удаления резервного пространства состоит в том, чтобы позволить большинству данных, которые не могут быть восстановлены, немедленно войти в старое поколение как можно скорее, ускорить частоту повторного использования старого поколения и уменьшить вероятность стремительного роста старого поколения. Это делается путем установки для -XX:SurvivorRatio относительно большого значения (например, 65536).

  • -verbose:gc -Xloggc:$CATALINA_HOME/logs/gc.log
    Запишите информацию о каждой сборке мусора виртуальной машины в файл журнала, имя файла указывается файлом, формат файла — плоский файл, а содержимое совпадает с выводом -verbose:gc.

  • -Djava.awt.headless=true
    Безголовый режим — это режим конфигурации системы. В этом режиме в системе отсутствует устройство отображения, клавиатура или мышь.

  • -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
    Установите формат журнала gc

  • -Dsun.rmi.dgc.server.gcInterval=600000 -Dsun.rmi.dgc.client.gcInterval=600000
    Задает временной интервал для gc при вызове rmi

  • -XX:+UseConcMarkSweepGC -XX:MaxTenuringThreshold=15
    Принять параллельный режим gc, войти в старое поколение после 15 минорных gc

Как анализировать журналы сборщика мусора

Выдержка из журнала GC

Журнал утилизации Young GC:

2016-07-05T10:43:18.093+0800: 25.395: [GC [PSYoungGen: 274931K->10738K(274944K)] 371093K->147186K(450048K), 0.0668480 secs] [Times: user=0.17 sys=0.08, real=0.07 secs]

Полный журнал утилизации ГХ:

2016-07-05T10:43:18.160+0800: 25.462: [Full GC [PSYoungGen: 10738K->0K(274944K)] [ParOldGen: 136447K->140379K(302592K)] 147186K->140379K(577536K) [PSPermGen: 85411K->85376K(171008K)], 0.6763541 secs] [Times: user=1.75 sys=0.02, real=0.68 secs]

Согласно приведенному выше анализу журнала, PSYoungGen, ParOldGen и PSPermGen принадлежат сборщику Parallel. Среди них PSYoungGen представляет изменение памяти молодого поколения до и после рекультивации gc; ParOldGen представляет изменение памяти старого поколения до и после рекультивации gc; PSPermGen представляет изменение памяти постоянной области до и после рекультивации gc. Молодой сборщик мусора в основном часто перерабатывает память для молодого поколения и занимает короткое время; полный сборщик мусора возвращает всю память кучи в город, что занимает много времени, поэтому обычно старайтесь максимально уменьшить количество полных сборщиков мусора.

Из двух рисунков очень очевидно, что состав журнала gc:

Журнал молодого ГК:

Полный журнал сборщика мусора:

Инструмент анализа ГХ

GChisto

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

После настройки локальной среды jdk дважды щелкните GChisto.jar и нажмите «Добавить» во всплывающем окне ввода, чтобы выбрать журнал gc.log.

  • Статистика GC Pause: вы можете просмотреть количество GC, время GC, накладные расходы GC, максимальное время GC и минимальное время GC и т. д., а также соответствующую гистограмму.

  • Распределение пауз сборщика мусора: Просмотр подробного распределения пауз сборки мусора.Ось X представляет время паузы сборки мусора, а ось Y представляет количество пауз.

  • Временная шкала GC: отображает сборку мусора по всей временной шкале.

Однако этот инструмент больше не поддерживается

GC Easy

Это веб-инструмент, которым очень удобно пользоваться онлайн.

адрес:gceasy.io

Зайдите на официальный сайт, загрузите упакованный zip или gz суффикс, и через некоторое время вы получите результаты анализа.

Этот инструмент рекомендуется для анализа gc.


Если вам понравилась моя статья, обратите внимание на мой публичный номер