Проблемы перезапуска приложения, вызванные проблемами без памяти

Примечание.

Azure Spring Apps — это новое название службы Azure Spring Cloud. Старое название будет еще некоторое время встречаться в наших материалах, пока мы не обновим ресурсы, такие как снимки экрана, видео и схемы.

Эта статья относится к: ✔️ Basic/Standard ✔️ Enterprise

В этой статье описываются проблемы без памяти (OOM) для приложений Java в Azure Spring Apps.

Типы проблем вне памяти

Существует два типа проблем вне памяти: OOM контейнера и OOM JVM.

  • OOM контейнера, который также называется системным OOM, возникает при истечении доступной памяти приложения. Проблема с OOM контейнера вызывает события перезапуска приложения, которые передаются в разделе Работоспособность ресурсов портал Azure. Как правило, OOM контейнера вызвана неправильными конфигурациями размера памяти.

  • OOM JVM возникает, когда объем используемой памяти достиг максимального размера в параметрах JVM. OOM JVM не приведет к перезапуску приложения. Как правило, OOM JVM является результатом плохого кода, который можно найти, найдя java.lang.OutOfMemoryError исключения в журнале приложений. OOM JVM оказывает негативное влияние на средства профилирования приложений и Java, такие как средство записи полетов Java.

В этой статье рассматривается устранение проблем с OOM контейнера. Чтобы устранить проблемы с OOM JVM, проверка средства, такие как дамп кучи, дамп потоков и средство записи тестов Java. Дополнительные сведения см. в статье "Сбор дампа кучи" и дампа потоков вручную и использование средства записи тестов Java в Azure Spring Apps.

Устранение проблем с перезапуском приложения из-за OOM

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

Просмотр оповещений на странице работоспособности ресурсов

Страница работоспособности ресурсов на портал Azure отображает события перезапуска приложения из-за OOM контейнера, как показано на следующем снимке экрана:

Screenshot of Azure portal showing Azure Spring Apps Resource Health page with OOM message highlighted.

Настройка размера памяти

Метрики использованияjvm.memory.used памяти приложения и jvm.memory.committed предоставляют представление об использовании памяти. Дополнительные сведения см. в разделе "Метрики" средства для устранения проблем с памятью. Настройте максимальный размер памяти в параметрах JVM, чтобы убедиться, что память находится под ограничением.

Сумма максимальных размеров памяти всех частей в модели памяти Java должна быть меньше, чем реальная доступная память приложения. Чтобы задать максимальный размер памяти, см. типичный макет памяти, описанный в разделе макета использования памяти Java.

Найдите баланс при установке максимального размера памяти. При установке максимального размера памяти слишком большой риск возникновения OOM контейнера. Если задать слишком низкий размер памяти, может возникнуть риск возникновения OOM JVM, а сборка мусора будет отспешить и замедлит работу приложения.

Управление памятью кучи

Максимальный размер кучи можно задать с помощью -Xmsпараметров , -Xmx-XX:InitialRAMPercentageи -XX:MaxRAMPercentage JVM.

Возможно, потребуется настроить максимальный размер кучи, если значение jvm.memory.used слишком большого размера метрик. Дополнительные сведения см. в разделе jvm.memory.used/committed/max средства для устранения проблем с памятью.

Управление прямой памятью

Важно задать -XX:MaxDirectMemorySize параметр JVM по следующим причинам:

  • Вы можете не заметить, когда платформы, такие как nio и gzip, используют прямую память.
  • Сборка мусора прямой памяти обрабатывается только во время полной сборки мусора, и полная сборка мусора возникает только в том случае, если куча почти полная.

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

Управление метапространством

Максимальный размер метапространства можно задать, задав -XX:MaxMetaspaceSize параметр JVM. Параметр -XX:MetaspaceSize задает пороговое значение для активации полной сборки мусора.

Память метапространства обычно стабильна.

См. также