Ранние симптомы истощения памяти были обнаружены в этом временном окне - PullRequest
0 голосов
/ 11 сентября 2018

Я изо всех сил пытаюсь понять следующую ошибку / предупреждение, выданное новой реликвией:

Ранние признаки истощения памяти были обнаружены в этом временном окне.

Ниже приведены профильные диаграммы на основе журналов.

new relic heap logs

new relic heap logs continuation

Я хотел бы понять:

  1. Почему Eden Space никогда не очищается полностью, когда происходит незначительный сборщик мусора?
  2. Основываясь на поведении сборщика мусора из журналов, соответствуют ли синий и желтый цвета крупному сборщику мусора и второстепенному сборщику мусора,соответственно?
  3. Почему GC все время собирает?
  4. Красноватая зона - это когда New Relic выдает предупреждение об исчерпании памяти.Но куча еще не заполнена.Будет ли это запускать автоматический выключатель для перехода в разомкнутое состояние?

Я заметил такое поведение при отправке нового вызова REST нашей службе исполнителя задач (например: executorService.submit(() -> restconecto.post(..))).Я попытался отправить logger.info(), и он работает нормально, но похоже, что длинный опрос - проблема.Ниже моя конфигурация GC: * ​​1033 *

  • Параллельный GC
  • -Xms2048m -Xmx2048m

Спасибо за любые идеи.

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018
  1. Используемый вами сборщик молодого поколения PS Scavenge . Этот коллектор использует несколько потоков параллельно. Таким образом, не существует полной остановки-остановки , которая собирает все узлы молодого поколения. Таким образом, доступное пространство, вероятно, не уменьшится до 0% для пространства Эдема.
  2. Желтые и синие линии на графиках не соответствуют основным или второстепенным событиям GC. Это зависит от самой диаграммы. Однако на диаграмме Время сбора мусора ЦП желтая область соответствует времени ЦП, потраченному на сборщик молодого поколения PS Scavenge, а синяя область соответствует времени ЦП, затраченному на сборщик старого поколения, PS Mark Sweep.
  3. Сборщик мусора работает все время, так как сборщики молодого поколения, выжившего и старого поколения используют несколько фоновых потоков. Это минимизирует число остановок в мире пауз, которые периодически возникают в однопоточных сборщиках мусора.
  4. На основании того, что я могу сказать из графиков, да. Красная зона - это период времени, в течение которого New Relic определяет, что ему необходимо приостановить выполнение программы и полностью очистить кучу, чтобы программа могла продолжить работу. Обычно одновременные сборщики просто заканчивают тем, что задерживают паузы остановки мира, а не полностью их предотвращают. См. оригинальный доклад Гила Тене о Сборке мусора для деталей. Подробнее об условиях отключения автоматического выключателя см. этот документ .
0 голосов
/ 11 сентября 2018
  1. Сборщик мусора является потоком демона и запускается при запуске JVM, а демон останавливается, когда останавливается весь поток, не являющийся демоном.Причина, по которой GC постоянно работает, а приложение никогда не очищается, скорее всего, потому что всегда есть что собирать (это может быть даже фоновая задача).Конечный пользователь не имеет контроля над сборщиком мусора.

  2. Не понимаю вашего вопроса на самом деле

  3. См. 1.

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

    Memory threshold: 20%
    Garbage collection CPU threshold: 10%
    

Конечно, они могут быть настроены, но в основном это означает, что если доступной памяти меньше порогового значения, предупреждение будетсрабатывает.

Как вы заметили при отправке запроса REST (в зависимости от фактически отправленного запроса и структуры / дизайна вашего приложения) этот конкретный запрос может быть «тяжелым» для обработки приложения, поэтому он может использовать больше памяти, чемвы можете ожидать.

...