Perguntas frequentes sobre o Iniciador de Comandos do Azure para Java (versão prévia pública)

Fornece respostas para perguntas comuns sobre o Iniciador de Comandos do Azure para Java.

Como essa ferramenta é diferente do comando java?

O java comando executa a JVM do HotSpot (Máquina Virtual Java) com configurações padrão, a menos que explicitamente configurada pelo usuário. jaz é um componente do Iniciador de Comandos do Azure para Java que executa java com configurações de tuning da JVM amplamente testadas e otimizadas para a nuvem, projetadas para melhorar o desempenho e a eficiência de custos em VMs e contêineres do Azure.

Principal benefício: os desenvolvedores não precisam ajustar manualmente a JVM. jaz faz isso por eles.

O que acontece se eu já definir algumas opções de JVM em meu ambiente?

Se a carga de trabalho incluir sinalizadores de ajuste JVM, o jaz comando não aplicará seus próprios padrões de ajuste. jaz lança java com os sinalizadores que você escolheu.

Recomendamos remover os sinalizadores de ajuste da sua carga de trabalho e deixar que o Azure Command Launcher para Java aplique os seus próprios.

Você também pode configurar o jaz para ignorar seus sinalizadores de ajuste e usar os valores padrão de ajuste. Considere usar essa configuração para validar jaz com uma alteração mínima na configuração da carga de trabalho. Para fazer isso, defina a seguinte variável de ambiente:

export JAZ_IGNORE_USER_TUNING=1

A configuração "Ignorar ajuste do usuário" se aplica a argumentos de linha de comando, variáveis de ambiente lidas pelo java e arquivos @.

Você também pode configurar jaz para ignorar todos os seus padrões de ajuste definindo a seguinte variável de ambiente:

export JAZ_BYPASS=1

A opção de bypass permite que você adote o Inicializador de Comandos do Azure para Java sem afetar o ajuste atual, mesmo que sua carga de trabalho utilize o comportamento padrão do comando java. Esse comportamento pode ser útil para validar o comportamento da ferramenta antes de limpar sinalizadores de ajuste JVM.

Também pode ser útil ignorar o ajuste ao solucionar um problema que pareça estar relacionado ao ajuste da JVM.

Quais opções de JVM são consideradas opções de ajuste?

O jaz comando considera a maioria dos sinalizadores que começam com -X ou -XX como um sinalizador de ajuste, como -Xmx<size>. Um exemplo notável de um sinalizador que começa com -X , mas não é um sinalizador de ajuste é -Xlog:<opts>.

Mais precisamente, cada opção JVM é avaliada usando a lógica na lista a seguir. Esta lista descreve a lógica na versão mais recente do Iniciador de Comandos do Azure para Java.

  1. Se a opção começar com qualquer texto diferente do que -X, então não é um sinalizador de ajuste.
  2. Se a opção corresponder a qualquer uma dessas expressões regulares, não será um sinalizador de ajuste:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. Caso contrário, a opção é um indicador de configuração.

Quando jaz busca sinalizadores de ajuste, ele examina os argumentos passados para ele e as variáveis de ambiente que java leem automaticamente. As variáveis de ambiente são:

  • Java 8: JAVA_TOOL_OPTIONS, _JAVA_OPTIONS
  • Java 9 e posterior: JAVA_TOOL_OPTIONS, JDK_JAVA_OPTIONS, _JAVA_OPTIONS

jaz também manipula @-files, também conhecidos como arquivos de argumento de linha de comando.

Posso passar sinalizadores do agente Java ao usar a ferramenta?

Yes. Você ainda pode passar o -javaagent e outros sinalizadores que não sejam de ajuste, e o jaz os respeitará. Você pode manter sinalizadores de diagnóstico úteis, como:

  • -Xlog para registro em log
  • -javaagent para Application Insights ou outros agentes de instrumentação de Monitoramento de Desempenho de Aplicativos (APM)

A ferramenta é compatível com ambientes que não são do Azure?

jaz é projetado e testado principalmente para Contêineres e Máquinas Virtuais do Azure, mas tecnicamente pode ser executado em outro lugar. No entanto, algumas otimizações avançadas e recursos futuros podem ser específicos do Azure.

A ferramenta está disponível para o Windows Server?

jaz atualmente está disponível para o Linux em ambientes x64 e arm64. Se você tiver uma necessidade imediata de Windows Server, entre em contato conosco em openjdk-support@microsoft.com.

O Iniciador de Comandos do Azure para Java foi testado e certificado apenas com instalações completas do JDK. Pode não funcionar corretamente com:

  • Instalações do JRE (Java Runtime Environment)
  • Ambientes de execução de jlink personalizados

As instalações completas do JDK incluem todas as ferramentas e bibliotecas que jaz precisam funcionar corretamente. Os runtimes personalizados de JRE e jlink podem não conter alguns desses componentes, o que pode impedir que jaz funcione conforme esperado.

Por que o ponto de montagem do cgroup é importante?

O inicializador de comandos Azure para Java lê informações do cgroup v1 e v2 de /sys/fs/cgroup para determinar os recursos disponíveis, como limites de memória e restrições de CPU, e ajustar a JVM adequadamente. Se o sistema de arquivos do cgroup não estiver montado no local padrão /sys/fs/cgroup , jaz talvez não detecte os limites de contêinerização corretamente. Isso pode levar a erros de desempenho ruim ou até mesmo de memória insuficiente, pois jaz pode ajustar a JVM com base nos recursos do host, em vez dos limites reais do contêiner.

Ainda não identificamos um cenário real em que o ponto de montagem do cgroup seja algo diferente de /sys/fs/cgroup. No entanto, é possível simular esse cenário em um contêiner desmontando o sistema de arquivos do /sys/fs/cgroup cgroup e montando-o em um local diferente. Nesse caso, o jaz não poderá ler as informações do cgroup e não aplicará o ajuste com reconhecimento de contêiner.

Para evitar problemas, não altere o ponto de montagem do cgroup do local padrão do /sys/fs/cgroup.

Embora os pontos de montagem do cgroup sejam mais relevantes em ambientes em contêineres, eles também podem ser relevantes em máquinas virtuais e em outros ambientes linux que usam cgroups para gerenciamento de recursos.

A ferramenta funciona com configurações de cgroup aninhadas?

Configurações de cgroup aninhadas podem afetar a forma como o Azure Command Launcher para Java lê os limites de recursos. jaz não foi testado com hierarquias de cgroup aninhadas, portanto, pode não detectar corretamente as restrições de recursos nesses ambientes.

Se você estiver usando cgroups aninhados e encontrar comportamentos inesperados, entre em contato conosco em openjdk-support@microsoft.com.