Preguntas más frecuentes sobre el iniciador de comandos de Azure para Java (versión preliminar pública)

Proporciona respuestas a preguntas comunes sobre el iniciador de comandos de Azure para Java.

¿Cómo es esta herramienta diferente del comando java?

El java comando ejecuta HotSpot JVM (Máquina virtual Java) con valores predeterminados a menos que el usuario lo configure explícitamente. jaz es un componente del iniciador de comandos de Azure para Java que inicia java con valores predeterminados de ajuste de JVM probados en batalla y optimizados para la nube, diseñados para mejorar el rendimiento y la rentabilidad en máquinas virtuales y contenedores de Azure.

Ventaja clave: los desarrolladores no necesitan ajustar manualmente la JVM. jaz lo hace para ellos.

¿Qué ocurre si ya he establecido algunas opciones de JVM en mi entorno?

Si la carga de trabajo incluye marcas de ajuste de JVM, el jaz comando no aplica sus propios valores predeterminados de ajuste. jaz lanza java con las banderas que eligió.

Se recomienda quitar las marcas de ajuste de la carga de trabajo y permitir que el iniciador de comandos de Azure para Java aplique las suyas propias.

También puede configurar jaz para omitir los indicadores de ajuste y usar sus valores predeterminados de ajuste. Considere la posibilidad de usar esta configuración para validar jaz con un cambio mínimo en la configuración de la carga de trabajo. Para ello, establezca la siguiente variable de entorno:

export JAZ_IGNORE_USER_TUNING=1

La configuración de omitir ajuste de usuario se aplica a los argumentos de la línea de comandos, las variables de entorno leídas por java y archivos con @.

También puede configurar jaz para omitir todos sus valores predeterminados de ajuste estableciendo la siguiente variable de entorno:

export JAZ_BYPASS=1

La opción de omisión le permite integrarse en el Iniciador de Comandos de Azure para Java sin afectar la configuración actual, incluso si la carga de trabajo usa el funcionamiento predeterminado del comando java. Este comportamiento puede ser útil para validar el comportamiento de la herramienta antes de limpiar las marcas de ajuste de JVM.

También puede ser útil omitir el ajuste al solucionar un problema que parece estar relacionado con el ajuste de JVM.

¿Qué opciones de JVM se consideran marcas de ajuste?

El comando jaz considera que la mayoría de las banderas que comienzan con -X o -XX son banderas de ajuste, como -Xmx<size>. Un ejemplo notable de una marca que comienza por -X pero no es una marca de optimización es -Xlog:<opts>.

Más precisamente, cada opción de JVM se evalúa mediante la lógica de la lista siguiente. En esta lista se describe la lógica de la versión más reciente del iniciador de comandos de Azure para Java.

  1. Si la opción comienza con cualquier texto distinto de -X, no es una bandera de ajuste.
  2. Si la opción coincide con cualquiera de estas expresiones regulares, no es una bandera de ajuste.
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. De lo contrario, la opción es un indicador de ajuste.

Cuando jaz busca banderas de ajuste, examina los argumentos que se le pasan y las variables de entorno que java lee automáticamente. Las variables de entorno son:

  • Java 8: JAVA_TOOL_OPTIONS, _JAVA_OPTIONS
  • Java 9 y versiones posteriores: JAVA_TOOL_OPTIONS, , JDK_JAVA_OPTIONS_JAVA_OPTIONS

jaz también controla @-files, también conocido como archivos de argumentos de línea de comandos.

¿Puedo pasar marcas de agente de Java al usar la herramienta?

Yes. Puede seguir pasando -javaagent y otras marcas que no son de ajuste y que jaz respeta. Puede mantener marcas de diagnóstico útiles como:

  • -Xlog para el registro
  • -javaagent para Application Insights u otros agentes de instrumentación de supervisión del rendimiento de aplicaciones (APM)

¿La herramienta es compatible con entornos que no son de Azure?

jaz está diseñado y probado principalmente para contenedores y máquinas virtuales de Azure, pero técnicamente se puede ejecutar en otro lugar. Sin embargo, algunas optimizaciones avanzadas y características futuras pueden ser específicas de Azure.

¿La herramienta está disponible para Windows Server?

jaz actualmente está disponible para Linux en entornos x64 y arm64. Si tiene una necesidad inmediata de Windows Server, por favor póngase en contacto con nosotros en openjdk-support@microsoft.com.

El iniciador de comandos de Azure para Java se ha probado y certificado solo con instalaciones completas de JDK. Puede que no funcione correctamente con:

  • Instalaciones de JRE (Java Runtime Environment)
  • Entornos de ejecución personalizados de jlink

Las instalaciones completas de JDK incluyen todas las herramientas y bibliotecas que jaz requieren para funcionar correctamente. Los entornos de ejecución personalizados JRE y jlink pueden carecer de algunos de estos componentes, lo que puede impedir jaz que funcione según lo previsto.

¿Por qué importa mi punto de montaje de cgroup?

El iniciador de comandos de Azure para Java lee la información de cgroup v1 y v2 de /sys/fs/cgroup para determinar los recursos disponibles, como los límites de memoria y las restricciones de CPU, y ajustar la JVM en consecuencia. Si el sistema de archivos de cgroup no está montado en la ubicación estándar /sys/fs/cgroup , jaz es posible que no detecte los límites de contenedorización correctamente. Esto puede provocar un rendimiento deficiente o incluso errores de memoria insuficiente porque jaz podría optimizar la JVM según los recursos del host en lugar de los límites reales del contenedor.

No hemos identificado un escenario real en el que el punto de montaje de cgroup es algo distinto de /sys/fs/cgroup. Sin embargo, es posible simular este escenario en un contenedor al desmontar el sistema de archivos de cgroup desde /sys/fs/cgroup y montarlo en una ubicación diferente. A continuación, jaz no podrá leer la información de cgroup y no aplicará el ajuste compatible con contenedores.

Para evitar problemas, no cambie el punto de montaje de cgroup desde la ubicación estándar /sys/fs/cgroup .

Aunque los puntos de montaje de cgroup son más relevantes en entornos en contenedores, también pueden ser relevantes en máquinas virtuales y otros entornos de Linux que usan cgroups para la administración de recursos.

¿Funciona la herramienta con configuraciones de cgroup anidadas?

Las configuraciones de cgroup anidadas pueden afectar a cómo el Azure Command Launcher para Java lee los límites de recursos. jaz no se ha probado con jerarquías de cgroup anidadas, por lo que es posible que no detecte restricciones de recursos correctamente en estos entornos.

Si usa cgroups anidados y experimenta un comportamiento inesperado, póngase en contacto con nosotros en openjdk-support@microsoft.com.