(Галантерейные товары) JVM остановит мир

JVM

Во-первых, проблемы, с которыми столкнулись

Общее время, в течение которого потоки приложения были остановлены в течение длительного времени, что представляет собой эта строка журнала и почему это время такое большое?

Значение журнала

Общее время, в течение которого потоки приложения были остановлены: 2,81 секунды. Остановка потоков заняла: 2,6 секунды.

При возникновении GC каждый поток может считаться приостановленным только при входе в SafePoint, то есть настоящая пауза.Смысл этого лога - время STW за весь процесс GC.-XX:+PrintGCApplicationStoppedTimeЭтот параметр будет печатать эту информацию.

Особенности:Первый - это количество секунд до 2,81 секунды после запуска JVM, второй JVM 2,6 секунды инициируется запуском STW до конца времени. В частности, если STW вызвано GC, это содержимое немедленно появится в журнале GC ниже.

3. Что такое безопасность

  1. С точки зрения потока безопасная точка — это какая-то особая позиция в выполнении кода, когда поток выполняется в эти особые позиции, если он в это время находится в сборщике мусора, то поток будет приостановлен в этом месте до тех пор, пока сборщик мусора заканчивается.
  2. Все активные потоки приостанавливаются во время GC, поэтому потоки приостанавливаются, и они выберут приостановку, когда достигнут безопасной точки.
  3. Точки сохранения — это специальные места, где хранится вся информация о контексте потока. Грубо говоря, вывод лог-информации при входе в безопасную точку позволяет увидеть, что делает поток в данный момент.

Для получения подробных инструкций по безопасным точкам перейдите по ссылке:

Safepoint анализа исходного кода JVM

[Java JVM] Hotspot GC Research — GC Safepoint&Stop The World

4. Что такое STW (остановить мир)

Поведение ожидания входа всех пользовательских потоков в безопасную точку и блокировка, выполнение некоторых глобальных операций.

5. Когда произойдет STW? (Другими словами, когда сработает вход в безопасную точку?)

  • Сбор мусора приостанавливается

  • Связанные с JIT, такие как деоптимизация кода, очистка кеша кода

  • Переопределение класса (например, javaagent, инструменты, сгенерированные имплантацией кода АОП)

  • Предвзятая отмена блокировки

  • Различные операции отладки (например, дамп потока или проверка взаимоблокировки) дамп потока

6. Описание СТВ

Настройте параметр -XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1, виртуальная машина распечатает следующий файл журнала:

-XX:+PrintSafepointStatistics Распечатать статистику точек сохранения,

-XX:PrintSafepointStatisticsCount=n Задать количество раз для печати статистики точек безопасности;

6.1 Анализ журнала:
  1. вмоп:Что вызвало STW и когда оно было запущено, в данном случае GC. Общие выходные данные этого элемента: RevokeBias, BulkRevokeBias, Deoptimize, G1IncCollectionPause.

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

  2. Всего :STW возникает, когда количество потоков в JVM существует.

  3. Initial_running :Когда происходит STW, количество потоков, которые все еще выполняются, это источник времени фазы вращения.

  4. ждать_до_блока:Количество потоков, которые STW необходимо заблокировать, это источник времени фазы блокировки.

  5. sync= вращение + блок + другое.

6.2 Из лога видно, что SAFEPOINT разбит на четыре фазы:
  1. Стадия вращения. Поскольку, когда JVM решает войти в глобальную точку сохранения, некоторые потоки находятся в точке сохранения, а некоторые потоки не находятся в точке сохранения.Этот этап заключается в ожидании, пока пользовательские потоки, которые не находятся в точке сохранения, войдут в точку сохранения.
  2. Этап блока. Даже если он входит в точку сохранения, пользовательский поток в это время все еще находится в рабочем состоянии, чтобы гарантировать, что пользователь не продолжит выполнение, и пользовательский поток необходимо заблокировать.
  3. Очистка. Эта фаза представляет собой некоторую внутреннюю очистку, которую выполняет JVM.
  4. Операция виртуальной машины.Некоторая глобальная работа, выполняемая JVM, например сборщик мусора, деоптимизация кода.
6.3 Описание вывода vmop

RevokeBias, BulkRevokeBias, отмена блокировки смещения.

Деоптимизировать,

G1IncCollectionPause GC Реализация GC.

6.3 Описание оптимизации

Анализ -XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1 Сгенерированная информация журнала в основном является причиной того, что STW имеет значение RevokeBias или BulkRevokeBias. Это нужно для того, чтобы отменить операцию блокировки со смещением.Хотя время каждой паузы очень короткое, оно будет занимать много времени, если оно будет происходить очень часто.

В некоторых системах с высокой степенью параллелизма отключение оптимизации блокировок JVM может повысить пропускную способность системы. Параметры для отключения предвзятой блокировки: -XX:-UseBiasedLocking.

7. Причины продолжительного STW

  • GC
  • RevokeBias также требует много времени для отмены предвзятой блокировки. В системах с высокой степенью параллелизма рекомендуется отключать предвзятую блокировку.
  • Девяносто процентов случаев связаны с двумя вышеуказанными причинами.

Восемь, живи

Настройте параметр -XX:+PrintSafepointStatistics –XX:PrintSafepointStatisticsCount=1 онлайн, и виртуальная машина напечатает следующий файл журнала:

Конечно же, отмена предвзятой блокировки сделала призрак.После добавления -XX:-UseBiasedLocking проблема была решена.