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

Примечание.

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

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

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

Оповещения и диагностика

В следующих разделах описаны оповещения о работоспособности ресурсов и диагностика доступные через портал Azure.

Работоспособность ресурса

Вы можете отслеживать события жизненного цикла приложения и настраивать оповещения с помощью журнала действий Azure и работоспособности служб Azure. Дополнительные сведения можно узнать в статье Мониторинг событий жизненного цикла приложений с помощью журнала действий Azure и службы «Работоспособность служб Azure».

Работоспособность ресурсов отправляет оповещения о событиях перезапуска приложения из-за проблем с контейнером вне памяти (OOM). Дополнительные сведения см. в статье о проблемах перезапуска приложений, вызванных проблемами без памяти.

На следующем снимка экрана показано оповещение о работоспособности ресурсов приложения, указывающее на проблему OOM.

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

Диагностика и решение проблем

Решение диагностики Azure Spring Apps — это интерактивный интерфейс для устранения неполадок в приложении без дополнительной настройки. Дополнительные сведения см. в статье о самостоятельной диагностике и решении проблем в Azure Spring Apps.

В портал Azure можно найти использование памяти в разделе "Диагностика и решение проблем", как показано на следующем снимке экрана.

Screenshot of Azure portal showing Azure Spring Apps Diagnose and solve problems page with Memory Usage highlighted in drop-down menu.

Использование памяти предоставляет простую диагностику использования памяти приложения, как показано на следующем снимке экрана.

Screenshot of Azure portal showing Azure Spring Apps Memory Usage page.

Метрики

В следующих разделах описываются метрики, охватывающие проблемы, включая использование большого объема памяти, кучи памяти, а также аномальную сборку мусора (слишком частые или недостаточно частые). Дополнительные сведения см . в кратком руководстве по мониторингу приложений Azure Spring Apps с помощью журналов, метрик и трассировки.

Использование памяти приложения

Использование памяти приложения — это процент, равный памяти приложения, используемой по ограничению памяти приложения. Это значение показывает всю память приложения.

jvm.memory.used/committed/max

Для памяти JVM существует три метрика: jvm.memory.used, jvm.memory.committedи jvm.memory.max, которые описаны в следующем списке.

"Память JVM" не является четко определенной концепцией. jvm.memory Ниже приведена сумма памяти кучи и бывшая часть permGen в памяти, отличной от кучи. Память JVM не включает прямую память или другую память, например стек потоков. Spring Boot Actuator собирает эти три метрики и определяет областьjvm.memory.

  • jvm.memory.used — это объем используемой памяти JVM, включая используемую память кучи и бывший permGen в памяти, отличной от кучи.

    jvm.memory.used является основным отражением изменения кучи памяти, так как бывшая часть permGen обычно стабильна.

    Если вы нашли jvm.memory.used слишком большой объем, попробуйте задать меньший максимальный размер памяти кучи.

  • jvm.memory.committed — это объем памяти, зафиксированный для используемого JVM. Размер jvm.memory.committed в основном является ограничением используемой памяти JVM.

  • jvm.memory.max — это максимальный объем памяти JVM, а не путать с реальным доступным объемом.

    Значение иногда jvm.memory.max может быть запутанным, так как оно может быть гораздо выше доступной памяти приложения. Чтобы уточнить, jvm.memory.max это сумма всех максимальных размеров памяти кучи и бывшая часть permGen в памяти, отличной от кучи, независимо от реальной доступной памяти. Например, если приложение установлено с 1 ГБ памяти на портале Azure Spring Apps, размер памяти кучи по умолчанию составляет 0,5 ГБ. Дополнительные сведения см. в разделе "Максимальный размер кучи по умолчанию" управления памятью Java.

    Если размер пространства класса по умолчанию равен 1 ГБ, значение jvm.memory.max больше 1,5 ГБ независимо от того, размер памяти приложения составляет 1 ГБ. Дополнительные сведения см. в руководстве по настройке сборки мусора виртуальной машины HotSpot выпуск Standard на платформе Java. Другие рекомендации в документации Oracle.

jvm.gc.memory.allocated/promoted

Эти две метрики предназначены для наблюдения за сборкой мусора Java (GC). Дополнительные сведения см. в разделе сборки мусора Java для управления памятью Java. Максимальный размер кучи влияет на частоту незначительных сборок и полной сборки GC. Максимальное метапространство и максимальный размер прямой памяти влияют на полную сборку данных. Если вы хотите настроить частоту сборки мусора, рассмотрите возможность изменения следующих максимальных размеров памяти.

  • jvm.gc.memory.allocated — это количество увеличения размера пула памяти молодого поколения после одной сборки и до следующей. Это значение отражает незначительный GC.

  • jvm.gc.memory.promoted — это количество увеличения размера пула памяти старого поколения после GC. Это значение отражает полный GC.

Эту функцию можно найти на портал Azure, как показано на следующем снимке экрана. Вы можете выбрать определенные метрики и добавить фильтры для определенного приложения, развертывания или экземпляра. Вы также можете применить разделение.

Screenshot of Azure portal showing Azure Spring Apps Metrics page.

Дальнейшая отладка

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

Кучи сбрасывают состояние памяти кучи Java. Дампы потоков записывают стеки всех динамических потоков. Эти средства доступны через Azure CLI и на странице приложения портал Azure, как показано на следующем снимке экрана.

Screenshot of Azure portal showing app overview page with Troubleshooting button highlighted.

Дополнительные сведения см. в статье "Сбор дампа кучи" и дампа потоков вручную и использование средства записи тестов Java в Azure Spring Apps. Для анализа дампов кучи можно также использовать сторонние средства, такие как Анализатор памяти.

Изменение конфигураций для устранения проблем

Некоторые проблемы, которые можно определить, включают в себя OOM контейнера, кучи памяти, слишком большой и аномальной сборки мусора. При выявлении каких-либо из этих проблем может потребоваться настроить максимальный размер памяти в параметрах JVM. Дополнительные сведения см. в разделе "Важные параметры JVM" управления памятью Java.

Параметры JVM можно изменить с помощью портал Azure или Azure CLI.

В портал Azure перейдите к приложению, а затем выберите "Конфигурация" в разделе Параметры меню навигации. На вкладке "Общие Параметры" обновите поле параметров JVM, как показано на следующем снимке экрана:

Screenshot of Azure portal showing app configuration page with JVM options highlighted.

См. также