Perguntas frequentes sobre o Azure Command Launcher para Java (pré-visualização pública)

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

Em que é que esta ferramenta difere do comando java?

O java comando executa a JVM HotSpot (Java Virtual Machine) com configurações padrão, a menos que explicitamente configurado pelo usuário. jaz é um componente do Azure Command Launcher para Java que lança java com configuração de JVM testada em batalhas e otimizada para a nuvem, concebidos para melhorar o desempenho e a eficiência de custos em Azure VMs e containers.

Benefício principal: 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 no meu ambiente?

Se a sua carga de trabalho incluir parâmetros de ajuste da JVM, o comando jaz não aplica os seus próprios valores de ajuste. jaz lança java com as bandeiras que você escolheu.

Recomendamos remover as flags de afinação da sua carga de trabalho e deixar o Azure Command Launcher para Java aplicar as suas próprias.

Pode também configurar jaz para ignorar os seus parâmetros de ajuste e usar os seus valores predefinidos. Considera usar esta configuração para validar jaz com alterações mínimas na configuração da tua carga de trabalho. Para tal, defina a seguinte variável de ambiente:

export JAZ_IGNORE_USER_TUNING=1

A definição de ignorar ajuste do utilizador aplica-se a argumentos de linha de comandos, variáveis de ambiente lidas por java, e ficheiros @.

Também pode configurar jaz para saltar todos os seus padrões de afinação definindo a seguinte variável de ambiente:

export JAZ_BYPASS=1

A opção de bypass permite-te integrar o Azure Command Launcher para Java sem afetar a sintonia atual, mesmo que a tua carga de trabalho use o comportamento padrão do java comando. Este comportamento pode ser útil para validar o comportamento da ferramenta antes de remover os parâmetros de ajuste da JVM.

Pode também ser útil pular a afinação ao solucionar um problema que pareça estar relacionado com a afinação da JVM.

Que opções de JVM são consideradas flags de otimização?

O jaz comando considera a maioria das bandeiras que começam com -X ou -XX como sendo uma bandeira de afinação, como -Xmx<size>. Um exemplo notável de uma flag que começa com -X mas não é uma flag de afinação é -Xlog:<opts>.

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

  1. Se a opção começar com qualquer texto que não seja -X, não é um sinalizador de ajuste.
  2. Se a opção corresponder a alguma destas expressões regulares, não é uma bandeira de afinação:
    • ^-Xlog.+$
    • ^-XX:ErrorFile=.*$
    • ^-XX:[+-]?HeapDump.*$
    • ^-XX:[+-].*OnOutOfMemoryError$
  3. Caso contrário, a opção é um flag de ajuste.

Quando jaz procura flags de ajuste, examina os argumentos que lhe são passados e as variáveis de ambiente que java lêem automaticamente. As variáveis ambientais são:

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

jaz também trata dos ficheiros @, também conhecidos como ficheiros de argumentos de linha de comandos.

Posso passar flags de agente Java ao usar a ferramenta?

Sim. Você ainda pode passar -javaagent e outros parâmetros que não são de ajuste, e jaz honra-os. Você pode manter sinalizadores de diagnóstico úteis, como:

  • -Xlog para registo
  • -javaagent para Application Insights ou outros agentes de instrumentação do Application Performance Monitoring (APM)

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

jaz foi 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 está atualmente disponível para Linux em ambientes x64 e arm64. Se tiver uma necessidade imediata de Windows Server, por favor contacte-nos através do openjdk-support@microsoft.com.

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

  • Instalações JRE (Java Runtime Environment)
  • Runtimes personalizados de jlink

As instalações completas do JDK incluem todas as ferramentas e bibliotecas necessárias jaz para funcionar corretamente. Os tempos de execução personalizados JRE e jlink podem não ter alguns destes componentes, o que pode impedir jaz que funcionem como esperado.

Por que o meu ponto de montagem cgroup é importante?

O Azure Command Launcher para Java lê informações 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 em conformidade. Se o sistema de ficheiros cgroup não estiver montado na localização padrão /sys/fs/cgroup , jaz pode não detetar corretamente os limites de containerização. Isto pode levar a baixo desempenho ou até erros de falta de memória, pois jaz pode ajustar a JVM com base nos recursos do host em vez dos limites reais do contentor.

Ainda não identificámos um cenário real onde o ponto de montagem do cgroup seja algo diferente de /sys/fs/cgroup. No entanto, é possível simular este cenário num contentor ao desmontar o sistema de ficheiros cgroup de /sys/fs/cgroup e montá-lo noutro local. Depois, jaz não poderá ler as informações do cgroup e não aplicará o ajuste adaptado ao contentor.

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

Embora os pontos de montagem cgroup sejam mais relevantes em ambientes contentorizados, também podem ser relevantes em máquinas virtuais e outros ambientes Linux que utilizam cgroups para gestão de recursos.

A ferramenta funciona com configurações de grupos aninhados?

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

Se estiver a usar grupos aninhados e experienciar comportamentos inesperados, por favor contacte-nos em openjdk-support@microsoft.com.