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

Предоставляет ответы на распространенные вопросы о средстве запуска команд Azure для Java.

Как это средство отличается от команды Java?

Команда java запускает JVM HotSpot (виртуальную машину Java) с настройками по умолчанию, если они не были явно изменены пользователем. jaz — это компонент средства запуска команд Azure для Java, который запускает java с проверенными в реальных условиях и оптимизированными для облака настройками JVM, предназначенными для повышения производительности и экономичности на виртуальных машинах Azure и в контейнерах.

Ключевое преимущество: разработчикам не нужно вручную настраивать JVM. jaz делает это для них.

Что произойдет, если в моей среде уже заданы некоторые параметры JVM?

Если рабочая нагрузка включает флаги настройки JVM, jaz команда не применяет собственные настройки по умолчанию. jaz запускается java с выбранными флагами.

Мы рекомендуем удалить флаги настройки рабочей нагрузки и разрешить средству запуска команд Azure для Java применять собственные.

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

export JAZ_IGNORE_USER_TUNING=1

Параметр настройки игнорирования пользователя применяется к аргументам командной строки, к переменным среды, считываемым с помощью java, и к файлам с символом "@" в начале.

Вы также можете настроить jaz на пропуск всех настроек по умолчанию, установив следующую переменную среды:

export JAZ_BYPASS=1

Параметр обхода позволяет подключиться к средству запуска команд Azure для Java, не влияя на текущую настройку, даже если рабочая нагрузка использует поведение java команды по умолчанию. Это поведение может быть полезно для проверки поведения средства перед очисткой флагов настройки JVM.

Может оказаться полезным обойти настройку при устранении неполадок, которые, по-видимому, связаны с настройкой JVM.

Какие параметры JVM считаются флагами настройки?

Команда jaz рассматривает большинство флагов, которые начинаются с -X или -XX являются флагом настройки, например -Xmx<size>. Заметный пример флага, который начинается с -X, но не является настраивающим флагом, это -Xlog:<opts>.

Точнее, каждый параметр JVM вычисляется с помощью логики в следующем списке. В этом списке описана логика в последней версии средства запуска команд Azure для Java.

  1. Если параметр начинается с любого текста, отличного от -Xтекста, это не флаг настройки.
  2. Если параметр соответствует любому из этих регулярных выражений, это не флаг настройки:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. В противном случае параметр является флагом настройки.

Когда jaz ищет флаги настройки, он проверяет аргументы, передаваемые ему, и автоматически считываемые java переменные среды. Переменные среды:

  • Java 8: JAVA_TOOL_OPTIONS, _JAVA_OPTIONS
  • Java 9 и более поздних версий: JAVA_TOOL_OPTIONS, JDK_JAVA_OPTIONS_JAVA_OPTIONS

jaz также обрабатывает файлы аргументов @-files, также известные как файлы аргументов командной строки.

Можно ли передавать флаги агента Java при использовании средства?

Yes. Вы по-прежнему можете передавать -javaagent и другие флаги, которые не относятся к настройке, и jaz учитывает их. Вы можете сохранить полезные диагностические флаги, такие как:

  • -Xlog для журналирования
  • -javaagent для агентов инструментирования Application Insights или других агентов мониторинга производительности приложений (APM)

Совместимо ли средство с средами, отличными от Azure?

jaz разработан и протестирован в основном для контейнеров Azure и виртуальных машин, но он может технически работать в другом месте. Однако некоторые расширенные оптимизации и будущие функции могут быть характерными для Azure.

Доступно ли средство для Windows Server?

jaz в настоящее время доступен для Linux в средах x64 и arm64. Если у вас есть немедленная потребность в Windows Server, обратитесь к нам по адресу openjdk-support@microsoft.com.

Средство запуска команд Azure для Java протестировано и сертифицировано только с полными установками JDK. Он может работать неправильно с:

  • Установки JRE (среда выполнения Java)
  • Пользовательские среды выполнения на основе jlink

Полные установки JDK включают все средства и библиотеки, необходимые jaz для правильной работы. JRE и jlink пользовательские среды выполнения могут не использовать некоторые из этих компонентов, что может препятствовать jaz функционированию должным образом.

Почему имеет значение точки подключения cgroup?

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

Мы не определили реальный сценарий, где точка монтирования cgroup является чем-то иным, чем /sys/fs/cgroup. Однако можно имитировать этот сценарий в контейнере, отмонтировав файловую систему /sys/fs/cgroup cgroup и примонтировав её в другом местоположении. Затем jaz не сможет прочитать информацию о cgroup и не будет применять настройку с учетом контейнеров.

Чтобы избежать проблем, не изменяйте точку подключения cgroup из стандартного /sys/fs/cgroup расположения.

Хотя точки подключения cgroup наиболее важны в контейнерных средах, они также могут быть релевантными в виртуальных машинах и других средах Linux, использующих группы cgroups для управления ресурсами.

Работает ли средство с вложенными конфигурациями cgroup?

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

Если вы используете вложенные группы cgroups и испытываете непредвиденное поведение, обратитесь к нам по адресу openjdk-support@microsoft.com.