средство запуска команд Azure для Java (общедоступная предварительная версия)

Средство запуска команд Azure для Java (jaz) — это упрощенная программа, которая упрощает запуск приложений Java разработчиками Azure. Благодаря интеллектуальному применению параметров Java виртуальных машин (JVM), адаптированных для облачных сред, средство уменьшает затраты на конфигурацию и улучшает использование ресурсов из коробки с более высоким потенциалом для повышения производительности.

Это средство идеально подходит для разработчиков, которые:

  • Хотите улучшить настройки JVM по умолчанию без необходимости глубокого изучения руководств по настройке.
  • Разработка и развертывание облачных собственных микрослужб с помощью платформ, таких как Spring Boot, Quarkus или Micronaut.
  • Предпочитайте рабочие процессы на основе контейнеров, такие как Kubernetes и OpenShift.
  • Развертывание рабочих нагрузок Java на Контейнеры приложений Azure, Служба Azure Kubernetes, Azure Red Hat OpenShift или Виртуальные машины Azure.

Ключевые особенности

  • 🛠 Автоматически настраивает флаги JVM для облачных развертываний.
  • 🚀 Интерфейс plug-and-play. Просто добавьте внутрь вашего Dockerfile или скрипта запуска, заменив команду java на jaz.
  • ☁️ Оптимизировано для сред Azure.
  • 🔧 Настраиваемая с помощью переменных среды. Существует несколько способов безопасного развертывания изменений конфигурации.

Поддерживаемые среды

Средство запуска команд Azure для Java можно использовать везде, где доступен средство запуска Java в средах Linux. Она была проверена и протестирована на следующих платформах Azure и CI/CD:

  • Служба Azure Kubernetes (AKS)
  • Контейнеры приложений Azure
  • Служба приложений Azure
  • Функции Azure
  • Azure Red Hat OpenShift (ARO)
  • Виртуальные машины Azure
  • Azure DevOps
  • GitHub Codespaces
  • GitHub Actions

Это важно

Средство запуска команд Azure для Java считывает сведения cgroup версии 1 и версии 2, чтобы определить доступные ресурсы и настроить JVM соответствующим образом. Он проверяет файлы в пределах /sys/fs/cgroup , чтобы обнаружить ограничения памяти и другие ограничения ресурсов.

Если система cgroup не смонтирована в /sys/fs/cgroup, средство запуска команд Azure для Java может неправильно обнаруживать ограничения контейнеризации, что приводит к плохой производительности или даже к ошибкам, связанным с недостатком памяти. Мы не выявили сценариев ни в одной из поддерживаемых сред, где это является проблемой, но возможно, что это ограничение может возникнуть в настраиваемых средах.

Дополнительные сведения см. в статье "Почему важна точка монтирования cgroup?".

Общедоступная предварительная версия

Средство запуска команд Azure для Java теперь доступно в общедоступной предварительной версии. Ознакомьтесь с объявлением общедоступной предварительной версии , чтобы ознакомиться с этим инструментом и его преимуществами.

Принцип работы

Средство запуска команд Azure для Java находится между командой запуска контейнера или виртуальной машины и JVM. При запуске средства он:

  1. Обнаруживает облачную среду (например, ограничения контейнеров и доступную память).
  2. Анализирует тип рабочей нагрузки и выбирает флаги настройки JVM, например:
    • Размер кучи.
    • Выбор и настройка сборщика мусора.
    • Параметры ведения журнала и диагностики по мере необходимости.
  3. Запускает процесс Java, передавая флаги настройки и любые предоставленные пользователем аргументы.
  4. Незаметно передает stdout, stderr, stdin и сигналы операционной системы в и из процесса Java.
  5. Отслеживает процесс Java и передает код выхода при завершении.

Пример использования

Средство запуска команд Azure для Java является заменой команды java, не требующей изменений кода. Просто замените java на jaz в скриптах запуска — например, замените java -jar foo.jar на jaz -jar foo.jar.

Вместо настройки параметров JVM вручную:

JAVA_OPTS="-XX:... several JVM tuning flags"
java $JAVA_OPTS -jar myapp.jar

Используйте jaz в следующих случаях:

jaz -jar myapp.jar

Ваше приложение может автоматически воспользоваться следующими преимуществами:

  • Боевые, проверенные временем настройки по умолчанию для облачно-нативных рабочих нагрузок и контейнеров.
  • Сокращение объемов памяти в облаке.
  • Улучшена производительность запуска и прогрева.

Установка

Средство запуска команд Azure для Java доступно как для x64, так и для Arm64 Linux. Поддерживаемые методы установки:

Образы контейнеров

Средство включено в образы контейнеров для Microsoft Build of OpenJDK. Дополнительная настройка не требуется.

Например, следующий файл Dockerfile использует jaz для запуска приложения Java из файла jar:

# Use any Microsoft Build of OpenJDK base image
FROM mcr.microsoft.com/openjdk/jdk:25-ubuntu

# Add your application.jar
COPY application.jar /application.jar

# Use jaz to launch your Java application
CMD ["jaz", "-jar", "application.jar"]

Установка в Azure Linux

Для виртуальных машин и других сред Linux Azure можно установить средство с помощью диспетчера пакетов tdnf. Установите пакет со следующей jaz командой:

sudo tdnf install jaz

Другие дистрибутивы Linux

Если вы уже настроили репозиторий программного обеспечения Linux для продуктов Microsoft, выполните соответствующую команду диспетчера пакетов для дистрибутива, чтобы установить пакет jaz.

Например, в дистрибутивах на основе Ubuntu или Debian выполните следующую команду:

sudo apt-get install jaz

Если у вас не настроен репозиторий программного обеспечения Linux для продуктов Microsoft, следуйте инструкциям для вашего дистрибутива Linux.

Чтобы установить в Ubuntu, откройте терминал и выполните следующие команды:

wget "https://packages.microsoft.com/config/ubuntu/$(. /etc/os-release; echo $VERSION_ID)/packages-microsoft-prod.deb" -O packages-microsoft-prod.deb && \
  sudo dpkg -i packages-microsoft-prod.deb

После добавления репозитория установите jaz , выполнив следующие команды:

sudo apt-get install apt-transport-https
sudo apt-get update
sudo apt-get install jaz

Сертифицированные версии JDK

Средство запуска команд Azure для Java требует установки JDK на основе OpenJDK (версии 8 или более поздней) в системе.

Это важно

Средство запуска команд Azure для Java требует полной установки JDK. Он не полностью протестирован с установками только JRE или пользовательскими средами выполнения на основе jlink. Дополнительные сведения см. в статье "Почему она не работает с средами выполнения JRE или jlink?".

Azure Command Launcher for Java сертифицирован со следующими JDK, для которых предоставляется полный набор корректировок параметров и оптимизаций как для x64, так и для arm64:

С другими JDK на основе OpenJDK инструмент делает всё возможное, чтобы запустить ваше приложение, но может не применять полный набор корректировок производительности или оптимизаций, специфичных для версии. Некоторые оптимизации также относятся к Microsoft Build of OpenJDK и не применяются к другим дистрибутивам.

Когда средство обнаруживает JDK, который не сертифицирован, он выводит следующее предупреждение в стандартную ошибку и продолжает запускать приложение:

jaz: WARNING: Detected a version of Java that has not been certified by jaz.

Для получения наилучших результатов используйте один из сертифицированных JDK, перечисленных ранее.

Конфигурация

Команда jaz не использует аргументы командной строки для собственной конфигурации. Вместо этого по умолчанию он передает все аргументы непосредственно команде java . Чтобы убедиться, что jaz конфигурация не вмешивается в аргументы приложения, jaz принимает конфигурацию только через переменные окружения.

Команда jaz может быть настроена с помощью следующих переменных среды:

Переменная среды Описание
JAZ_HELP Установите 1 для печати сообщения справки и завершения с кодом 0.
JAZ_PRINT_VERSION Установите значение 1, чтобы печатать jaz версии на stdout и завершить выполнение с кодом 0.
JAZ_DRY_RUN Установите 1, чтобы выводить команду java, которая будет выполнена, и выйти с кодом 1.
JAZ_BYPASS Установите 1, чтобы обойти корректировки оптимизации jaz. Не влияет на данные телеметрии.
JAZ_IGNORE_USER_TUNING Настройте 1 на игнорирование всех флагов настройки, предоставленных пользователем, и вместо этого примените jaz настройку. В противном случае jaz будет настраивать JVM только в том случае, если не обнаружит флаги настройки, предоставленные пользователем. Дополнительные сведения о том, как работает с включенными и выключенными параметрами, см. в статье jaz.
JAZ_EXIT_WITHOUT_FLUSH Установите для 1 чтобы пропустить сброс данных телеметрии при выходе. Это позволяет избежать потенциальных задержек (до 30 секунд) jaz при сбросе данных, однако jaz может по-прежнему отправлять телеметрию.

Использование переменных среды, а не аргументов командной строки также упрощает настройку jaz в некоторых случаях. При развертывании контейнерного приложения иногда проще задать переменные среды, чем изменять скрипты запуска, и экспериментирование с JAZ_IGNORE_USER_TUNING и JAZ_BYPASS может быть полезным при оценке jaz.

Дорожная карта

  • ⚙️ Профили конфигурации JVM
  • 📦 Поддержка AppCDS
  • 🔄 Непрерывная настройка
  • 📊 Телеметрия
  • 📦 Поддержка Leyden

Журнал изменений

0.0.0-preview+20260421.1

  • Обновления зависимостей.

0.0.0-preview+20260408.1

  • Обновления зависимостей.

0.0.0-preview+20260403.2

  • Обновления зависимостей.

0.0.0-preview+20260323.1

  • Обновления зависимостей.

0.0.0-preview+20260223.1

  • Обновления зависимостей.

0.0.0-preview+20260120.1

  • Обновления зависимостей.

0.0.0-preview+20251211.7

  • Обновления зависимостей.
  • Другие исправления ошибок.

0.0.0-preview+20251205.1

  • Исправления внутренних ошибок.

0.0.0-preview+20251126.1

  • Добавьте Microsoft Build of OpenJDK 25 в список сертифицированных версий.

0.0.0-preview+20251120.1

  • Обновления зависимостей.

0.0.0-preview+20251118.1

  • Перейдите в общедоступную предварительную версию.
  • Реализуйте пакеты RPM и DEB.
  • Улучшайте корректировки сборщика мусора.
  • Остановите создание неясных диагностических выходных данных, когда программа Java завершает работу с ненулевом кодом.
  • Улучшение передачи сигналов ОС в процесс Java, например SIGTERM и SIGINT.
    • Остановка контейнера с Java приложением теперь дает приложению время для корректного завершения работы.
  • Удалите использование PrintFlagsFinal, что улучшает совместимость с определенными приложениями Java.
    • Исправлены вызовы System.console(), которые вызывают исключения.
    • Исправьте буферизацию потока stdout: jaz больше не задерживает вывод ретранслятора, пока он не увидит новый символ строки.
  • Другие исправления ошибок и улучшения внутренней устойчивости.

Частная предварительная версия 2

  • Исправления ошибок.
  • Расширенная совместимость дистрибутивов Linux путем снижения требований к glibc.
  • jaz теперь обнаруживает наличие какой-либо настройки JVM вручную и в таком случае не применяет собственные корректировки.
  • JAZ_IGNORE_USER_TUNING=1 Игнорирует настройку JVM вручную, если она присутствует, и применяет собственные корректировки настройки jaz.
  • Исправлено PrintFlagsFinal отображение выходных данных (если оно не запрашивается) при использовании jaz с OpenJDK HotSpot JVM 8.

Частная предварительная версия 1

  • Первоначальный релиз Azure Command Launcher для Java.

Телеметрия

средство запуска команд Azure для Java собирает данные об использовании и отправляет его в Microsoft, чтобы улучшить наши продукты и службы. Дополнительные сведения см. в нашем заявлении о конфиденциальности.