Java Profiler para o Application Insights do Azure Monitor

Observação

O recurso Java Profiler está em versão prévia a partir da versão 3.4.0.

O Java Profiler do Application Insights fornece um sistema para:

  • Gerar perfis JFR (JDK Flight Recorder) sob demanda a partir da JVM (Máquina Virtual Java).
  • Gerar perfis JFR automaticamente quando determinadas condições de gatilho são atendidas pela JVM, como CPU ou memória que viola um limite configurado.

Visão geral

O criador de perfil Java do Application Insights usa o criador de perfil JFR fornecido pela JVM para registrar dados de criação de perfil, permitindo que os usuários baixem as gravações do JFR posteriormente e analisem-nas para identificar a causa dos problemas de desempenho.

Esses dados são coletados sob demanda quando as condições de gatilho são atendidas. Os gatilhos disponíveis são limites sobre o uso da CPU, o consumo de memória e a solicitação (gatilhos de contrato de nível de serviço). Os gatilhos de solicitação monitoram os intervalos gerados pelo OpenTelemetry e permitem que o usuário configure os requisitos de Contrato de Nível de Serviço (SLA) durante esses intervalos.

Quando um limite é atingido, um perfil do tipo configurado e da duração é coletado e carregado. Esse perfil fica visível no painel de desempenho da interface do usuário associada do Portal do Application Insights.

Aviso

O criador de perfil JFR executa o perfil "profile-without-env-data" por padrão. Um arquivo JFR é uma série de eventos emitidos pela JVM. A configuração "profile-without-env-data" é semelhante à configuração de "perfil" que é fornecida com a JVM, mas que teve alguns eventos desabilitados os quais têm o potencial de conter informações confidenciais de implantação, como variáveis de ambiente, argumentos fornecidos para a JVM e processos em execução no sistema.

Os sinalizadores que não estão mais disponíveis são:

  • jdk.JVMInformation
  • jdk.InitialSystemProperty
  • jdk.OSInformation
  • jdk.InitialEnvironmentVariable
  • jdk.SystemProcess

Porém, você deve examinar todos os sinalizadores habilitados para garantir que os perfis não contenham dados confidenciais.

Confira Configurar o conteúdo do perfil ao configurar um criador de perfil personalizado.

Pré-requisitos

  • JVM com capacidade para JFR (Java Flight Recorder)
    • Java 8 atualização 262+
    • Java 11+

Aviso

Não há suporte para a JVM OpenJ9

Uso

Gatilhos

Para obter uma descrição mais detalhada dos vários gatilhos disponíveis, confira a visão geral do criador de perfil.

O ApplicationInsights Java Agent monitora a duração da CPU, memória e solicitação, como uma transação comercial. Se ele violar um limite configurado, um perfil será disparado.

Criar perfil agora

Um botão Criar perfil agora está localizado na interface do usuário da interface do usuário do criador de perfil (confira configurações do criador de perfil). A seleção desse botão solicita imediatamente um perfil em todos os agentes anexados à instância do Application Insights. A duração padrão da criação de perfil é de dois minutos. Você pode alterá-lo substituindo-o periodicRecordingDurationSeconds (confira Arquivo de configuração).

Aviso

Invocar o Perfil agora habilitará o recurso criador de perfil e o Application Insights aplicará gatilhos padrão de CPU e memória SLA. Quando o aplicativo violar esses SLAs, o Application Insights coletará perfis Java. Se você quiser desabilitar a criação de perfil posteriormente, poderá fazer isso no menu de gatilho mostrado em Instalação.

CPU

O limite da CPU é uma porcentagem do uso de todos os núcleos disponíveis no sistema.

Como exemplo, se um núcleo de um computador de oito núcleos estivesse saturado, o percentual da CPU seria considerado 12,5%.

Memória

O percentual de memória é a ocupação atual da região de memória titular (OldGen) em relação ao tamanho máximo possível da região.

A ocupação é avaliada depois da execução de uma coleta titular. O tamanho máximo da região titular é o tamanho que ela teria se o heap da Máquina Virtual Java (JVM) aumentasse para seu tamanho máximo.

Por exemplo, veja o seguinte cenário:

  • O heap do Java pode aumentar até um máximo de 1.024 MB.
  • A Geração Titular pode crescer a até 90% do heap.
  • O tamanho máximo possível do titular seria de 922 MB.
  • Seu limite foi definido por meio da interface do usuário como 75%, portanto, seu limite seria de 75% de 922 MB, ou seja, 691 MB.

Nesse cenário, um perfil ocorre nas seguintes circunstâncias:

  • A coleta de lixo completa é executada
  • A ocupação de regiões titulares está acima de 691 MB após a coleta

Solicitação

Os gatilhos SLA são baseados em OpenTelemetry e iniciam um perfil se determinados critérios forem atendidos.

Cada configuração de gatilho individual é formada da seguinte maneira:

  • Name - Um identificador exclusivo para o gatilho.
  • Filter - Filtra as solicitações de interesse para o gatilho.
  • Aggregation: calcula a proporção de solicitações que violaram um determinado limite.
    • Threshold: valor mínimo (em milissegundos) no qual se determina que ocorreu uma violação de solicitação.
    • Minimum samples: o número mínimo de amostras que devem ser coletadas para que a agregação produza dados, essa configuração serve para evitar disparos baseados em tamanhos de amostra pequenos.
    • Window - Janela de tempo sem interrupção (em milissegundos).
  • Threshold - O valor limite (percentual) aplicado à saída de agregação. Se esse valor for excedido, um perfil será iniciado.

Por exemplo, o cenário a seguir dispararia um perfil se: mais de 75% das solicitações para um ponto de extremidade específico (/users/.*) demorassem mais de 30 ms em uma janela de 60 segundos, quando pelo menos 100 amostras fossem coletadas.

Captura de tela da amostra de gatilho de solicitação

Instalação

As etapas a seguir orientam você no processo de habilitação do componente de criação de perfil no agente e no processo de configuração dos limites de recurso que disparam um perfil caso seja violado.

  1. Configure os limites de recurso que fazem com que um perfil seja coletado:

    1. Navegue até a seção Desempenho –> Criador de perfil da instância do Application Insights. Captura de tela do link para abrir a folha de desempenho.Captura de tela do botão Criador de Perfil na folha Desempenho.

    2. Selecione "Gatilhos"

    3. Configure os gatilhos de CPU, Memória ou Solicitação necessários (se habilitados) e selecione Aplicar. Captura de tela de configurações de gatilho

Aviso

O criador de perfil Java não dá suporte ao gatilho "Amostragem". A configuração desse item não terá efeito.

Após a conclusão destas etapas, o agente monitorará o uso de recursos do processo e disparará um perfil quando o limite for ultrapassado. Quando um perfil é disparado e concluído, ele fica visível na instância do Application Insights na seção Desempenho –> Criador de perfil. Nessa tela, o perfil pode ser baixado e, depois disso, o arquivo de gravação JFR poderá ser aberto e analisado dentro de uma ferramenta de sua escolha, como o Oracle JDK Mission Control (JMC).

Captura de tela dos recursos e configurações da página do criador de perfil.

Configuração

A definição das configurações de gatilho do criador de perfil, como limites e períodos de criação de perfil, é definida dentro da interface do usuário do Application Insights sob a interface do usuário de Desempenho, Criador de perfil e Gatilhos, conforme descrito na Instalação.

Além disso, muitos parâmetros podem ser configurados usando variáveis de ambiente e o arquivo de configuração applicationinsights.json.

Configuração do conteúdo do perfil

Se quiser fornecer uma configuração de perfil personalizado, altere memoryTriggeredSettingse cpuTriggeredSettings para fornecer o caminho para um arquivo .jfc com a configuração necessária.

Os perfis podem ser gerados/editados na interface do usuário do JMC (JDK Mission Control) no menu Window->Flight Recording Template Manager, e o controle sobre sinalizadores individuais é encontrado dentro de Edit->Advanced dessa interface do usuário.

Variáveis de ambiente

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: booliano (padrão: true) Habilita/desabilita o recurso de criação de perfil. Por padrão, o recurso está habilitado no agente (desde o agente 3.4.9). No entanto, mesmo que esse recurso esteja habilitado no agente, os perfis não são coletados, a menos que sejam habilitados no Portal, conforme descrito em Instalação.

Arquivo de configuração

Exemplo de configuração:

{
  "preview": {
    "profiler": {
      "enabled": true,
      "cpuTriggeredSettings": "profile-without-env-data",
      "memoryTriggeredSettings": "profile-without-env-data",
      "manualTriggeredSettings": "profile-without-env-data",
      "enableRequestTriggering": true,
      "periodicRecordingDurationSeconds": 60
    }
  }
}

memoryTriggeredSettings Essa configuração é usada se um perfil de memória for solicitado. Esse valor pode ser um dos seguintes:

  • profile-without-env-data (valor padrão). Um perfil com determinados eventos confidenciais desabilitados; confira a seção Aviso para mais detalhes.
  • profile. Usa a configuração profile.jfc que é fornecida com o JFR.
  • Um caminho para um arquivo de configuração jfc personalizado no sistema de arquivos, por exemplo, /tmp/myconfig.jfc.

cpuTriggeredSettings Essa configuração é usada se um perfil de CPU for solicitado. Esse valor pode ser um dos seguintes:

  • profile-without-env-data (valor padrão). Um perfil com determinados eventos confidenciais desabilitados; confira a seção Aviso para mais detalhes.
  • profile. Usa a configuração jfc profile.jfc que é fornecida com o JFR.
  • Um caminho para um arquivo de configuração jfc personalizado no sistema de arquivos, por exemplo, /tmp/myconfig.jfc.

manualTriggeredSettings Essa configuração é usada se um perfil manual for solicitado. Esse valor pode ser um dos seguintes:

  • profile-without-env-data (valor padrão). Um perfil com determinados eventos confidenciais desabilitados; confira a seção Aviso para mais detalhes.
  • profile. Usa a configuração jfc profile.jfc que é fornecida com o JFR.
  • Um caminho para um arquivo de configuração jfc personalizado no sistema de arquivos, por exemplo, /tmp/myconfig.jfc.

enableRequestTriggering Se a criação de perfil JFR deve ser disparada com base na configuração da solicitação. Esse valor pode ser um dos seguintes:

  • true A criação de perfil é disparada se um limite de gatilho de solicitação for violado.
  • false (valor padrão). A configuração de solicitação não dispara a criação de perfil.

periodicRecordingDurationSeconds Duração da gravação de criação de perfil em segundos quando uma sessão de criação de perfil é iniciada pelo botão Criar perfil agora. O valor padrão é 120.

Perguntas frequentes

O que é a Criação de Perfil Java do Application Insights do Azure Monitor?

O criador de perfil Java do Application Insights do Azure Monitor usa o JFR (Java Flight Recorder) para criar o perfil do aplicativo usando uma configuração personalizada.

O que é o Java Flight Recorder?

O Java Flight Recorder (JFR) é uma ferramenta usada para coletar dados de criação de perfil de um aplicativo Java em execução. O JFR é integrado à Máquina Virtual Java (JVM) e é usado para solucionar problemas de desempenho. Saiba mais sobre o JFR Runtime do Java SE.

Quais são as implicações de preço e/ou taxa de licenciamento para habilitar a Criação de Perfil Java do App Insights?

A habilitação da Criação de Perfil Java é um recurso gratuito com o Application Insights. O preço do Application Insights do Azure Monitor se baseia no custo de ingestão.

Quais informações de criação de perfil Java são coletadas?

Os dados da criação de perfil coletados pelo JFR incluem: dados de criação de perfil de método e execução, dados de coleta de lixo e perfis de bloqueio.

Como posso usar a Criação de Perfil Java do App Insights e visualizar os dados?

A gravação do JFR pode ser exibida e analisada com sua ferramenta preferida, por exemplo, JMC (Java Mission Control).

O diagnóstico de desempenho e as recomendações de correção são fornecidos com a Criação de Perfil Java do App Insights?

O "Diagnóstico e recomendações de desempenho" é um nova funcionalidade que estará disponível em breve como Diagnóstico Java do Application Insights. Você pode se inscrever para obter a versão prévia desse recurso. A gravação do JFR pode ser exibida com o JMC (Java Mission Control).

Qual é a diferença entre a criação de perfil Java sob demanda e automática no App Insights?

A criação de perfil sob demanda é disparada pelo usuário em tempo real, enquanto a automática é feita com gatilhos pré-configurados.

Use Criar perfil agora para a opção de criação de perfil sob demanda. A função Criar perfil agora cria imediatamente o perfil de todos os agentes que estão anexados à instância do Application Insights.

A criação de perfil automatizada é disparada após uma violação de um limite de recurso.

Quais gatilhos de criação de perfil Java eu posso configurar?

Atualmente, o Agente Java do Application Insights dá suporte ao monitoramento do consumo de CPU e de memória. O limite da CPU é configurado como uma porcentagem de todos os núcleos disponíveis no computador. A memória é a ocupação atual da região de memória titular (OldGen) em relação ao tamanho máximo possível da região.

Quais são os pré-requisitos necessários para habilitar a Criação de Perfil Java?

Confira os Pré-requisitos no início deste artigo.

Posso usar a Criação de Perfil Java para aplicativo de microsserviços?

Sim, você pode criar um perfil de uma JVM executando microsserviços usando o JFR.