Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Виртуальная машина Java (JVM) использует память консервативно, так как предполагается, что память ОС должна быть предоставлена нескольким приложениям. Однако приложение-контейнер может оптимизировать использование памяти и сделать максимальный объем памяти доступным для приложения. Эта оптимизация памяти называется автоматической установкой памяти Java. Если включена настройка памяти, производительность приложений Java обычно улучшается в диапазоне от 10% до 20 % без каких-либо изменений кода.
Приложения контейнеров Azure обеспечивают автоматическую настройку памяти в следующих случаях:
- Одно приложение Java выполняется в контейнере.
- Приложение развертывается из исходного кода или JAR-файла.
Автоматическая настройка памяти включена по умолчанию, но вы можете отключить вручную.
Отключение крепления памяти
Автоматическая настройка памяти полезна в большинстве сценариев, но она может быть не идеальной для всех ситуаций. Вы можете отключить установку памяти вручную или автоматически.
Отключение вручную
Чтобы отключить настройку памяти при создании приложения-контейнера, задайте для переменной BP_JVM_FIT среды значение false.
В следующих примерах показано, как отключить настройку памяти с помощью команд create, up и update.
az containerapp create \
--name <CONTAINER_APP_NAME> \
--resource-group <RESOURCE_GROUP> \
--image <CONTAINER_IMAGE_LOCATION> \
--environment <ENVIRONMENT_NAME> \
--env-vars BP_JVM_FIT="false"
Чтобы убедиться, что подгонка памяти отключена, проверьте журналы в поисках следующего сообщения:
Отключение подгонки памяти JVM, причина: вручную отключено
Автоматическое отключение
Настройка конфигурации памяти автоматически отключается при наступлении любого из следующих условий:
Ограниченная память контейнера: объем памяти контейнера меньше 1 ГБ.
Явно задать параметры памяти: если один или несколько параметров памяти указываются в переменных среды.
JAVA_TOOL_OPTIONSПараметры параметров памяти включают следующие значения:-XX:MaxRAMPercentage-XX:MinRAMPercentage-XX:InitialRAMPercentage-XX:MaxMetaspaceSize-XX:MetaspaceSize-XX:ReservedCodeCacheSize-XX:MaxDirectMemorySize-Xmx-Xms-Xss
Например, настройка памяти автоматически отключается, если указать максимальный размер кучи в переменной среды, как показано в следующем примере:
az containerapp update \ --name <CONTAINER_APP_NAME> \ --resource-group <RESOURCE_GROUP> \ --image <CONTAINER_IMAGE_LOCATION> \ --set-env-vars JAVA_TOOL_OPTIONS="-Xmx512m"При отключенной настройке памяти в журнал отображаются следующие выходные данные сообщения:
Отключение параметров памяти jvm, причина: используйте параметры, указанные в JAVA_TOOL_OPTIONS=-Xmx512m, а не выбраны JAVA_TOOL_OPTIONS: -Xmx512m
Небольшой размер памяти, отличной от кучи: редкие случаи, когда вычисляемый размер кучи или негепа слишком мал (менее 200 МБ).
Проверка соответствия памяти включена
Проверьте ваш лог поток во время запуска на наличие сообщения, которое ссылается на рассчитанную конфигурацию памяти JVM.
Вот пример выходного сообщения во время запуска.
Вычисленная конфигурация памяти JVM: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M (общая память: 2G, количество потоков: 250, количество загруженных классов: 12924, запас до переполнения: 0%)
Найдены JAVA_TOOL_OPTIONS: -XX:MaxDirectMemorySize=10M -Xmx1498277K -XX:MaxMetaspaceSize=86874K -XX:ReservedCodeCacheSize=240M -Xss1M
Конфигурация среды выполнения
Вы можете задать переменные среды, чтобы повлиять на поведение параметров памяти.
| «Переменная» | Единица измерения | Пример | Описание |
|---|---|---|---|
BPL_JVM_HEAD_ROOM |
Процентное отношение | BPL_JVM_HEAD_ROOM=5 |
Оставьте пространство памяти для системы на основе заданного процента. |
BPL_JVM_THREAD_COUNT |
Число | BPL_JVM_THREAD_COUNT=200 |
Предполагаемое максимальное количество потоков. |
BPL_JVM_CLASS_ADJUSTMENT |
Число Процентное отношение |
BPL_JVM_CLASS_ADJUSTMENT=10000BPL_JVM_CLASS_ADJUSTMENT="10%" |
Настройте число классов JVM по явному значению или проценту. |
Примечание.
Изменение этих переменных не отключает автоматическую установку памяти.
Предупреждение об нехватке памяти
Если вы решите самостоятельно настроить параметры памяти, вы рискуете столкнуться с предупреждением о нехватке памяти.
Ниже приведены некоторые возможные причины того, почему контейнер может исчерпать память:
Объем памяти кучи превышает весь объем доступной памяти.
Негеапная память больше общей доступной памяти.
Куча и внекучевая память суммарно больше, чем общая доступная память.
Если у контейнера заканчивается память, вы увидите следующее предупреждение:
Предупреждение OOM: куча памяти 1200M превышает 1G, доступную для выделения (-Xmx1200M)