Поделиться через


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

Примечание.

Планы "Базовый", "Стандартный" и "Корпоративный" будут устарели начиная с середины марта 2025 г. с 3-летнего периода выхода на пенсию. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в объявлении о выходе на пенсию в Azure Spring Apps.

Стандартный план потребления и выделенного плана будет устарел с 30 сентября 2024 г. с полным завершением работы после шести месяцев. Рекомендуется перейти в приложения контейнеров Azure. Дополнительные сведения см. в статье "Миграция потребления Azure Spring Apps Standard" и выделенного плана в приложения контейнеров Azure.

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

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

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

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

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

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

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

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

Снимок экрана: портал Azure с страницей Работоспособность ресурсов Azure Spring Apps с выделенным сообщением OOM.

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

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

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

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

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

Снимок экрана: страница использования памяти Azure Spring Apps портал Azure.

Метрики

В следующих разделах описываются метрики, охватывающие проблемы, включая использование большого объема памяти, кучи памяти, а также аномальную сборку мусора (слишком частые или недостаточно частые). Дополнительные сведения см . в кратком руководстве по мониторингу приложений 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, как показано на следующем снимке экрана. Вы можете выбрать определенные метрики и добавить фильтры для определенного приложения, развертывания или экземпляра. Вы также можете применить разделение.

Снимок экрана: страница

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

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

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

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

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

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

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

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

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

Снимок экрана: портал Azure с выделенной страницей конфигурации приложения с выделенными параметрами JVM.

См. также