Java Profiler para Azure Monitor Application Insights

Nota

O recurso Java Profiler está em visualização, a partir da versão 3.4.0.

O Application Insights Java Profiler fornece um sistema para:

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

Descriçã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 JFR posteriormente e as analisem para identificar a causa dos problemas de desempenho.

Estes dados são recolhidos a pedido quando as condições de desencadeamento são satisfeitas. Os gatilhos disponíveis são limites sobre o uso da CPU, consumo de memória e solicitação (gatilhos de contrato de nível de serviço). Os gatilhos de solicitação monitoram Spans gerados pelo OpenTelemetry e permitem que o usuário configure os requisitos de contrato de nível de serviço (SLA) durante a duração desses Spans.

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

Aviso

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

As bandeiras que não estão mais disponíveis são:

  • JDK. JVMInformação
  • JDK. InitialSystemProperty
  • JDK. OSInformação
  • JDK. InitialEnvironmentVariable
  • JDK. Processo do Sistema

No entanto, você deve revisar todos os sinalizadores habilitados para garantir que os perfis não contenham dados confidenciais.

Consulte Configurando o conteúdo do perfil ao definir uma configuração personalizada do criador de perfil.

Pré-requisitos

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

Aviso

A JVM OpenJ9 não é suportada

Utilização

Acionadores

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

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

Perfil agora

Um botão Perfil agora está localizado na interface do usuário do criador de perfil (consulte Configurações do criador de perfil). Selecionar esse 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 periodicRecordingDurationSeconds (consulte Arquivo de configuração).

Aviso

Invocar Perfil agora habilitará o recurso de criador de perfil e o Application Insights aplicará gatilhos de SLA de CPU e memória padrão. Quando seu aplicativo viola esses SLAs, o Application Insights coleta perfis Java. Se você deseja desativar a criação de perfil mais tarde, você pode fazê-lo dentro do menu de gatilho mostrado em Instalação.

CPU

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

Por exemplo, se um núcleo de uma máquina de oito núcleos estivesse saturado, a percentagem de CPU seria considerada 12,5%.

Memória

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

A ocupação é avaliada após a realização de uma coleta permanente. O tamanho máximo da região tenured é o tamanho que seria se o heap Java Virtual Machine (JVM) crescesse para seu tamanho máximo.

Por exemplo, considere o seguinte cenário:

  • A pilha Java poderia crescer até um máximo de 1.024 mb.
  • A Geração Tenured poderia crescer até 90% da pilha.
  • O tamanho máximo possível de tenured seria de 922 mb.
  • Seu limite foi definido através da interface do usuário para 75%, portanto, seu limite seria 75% de 922 mb, 691 mb.

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

  • A coleta completa de lixo é executada
  • A ocupação das regiões tenured é superior a 691 mb após a coleta

Pedir

Os gatilhos de 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 forma:

  • Name - Um identificador único para o gatilho.
  • Filter - Filtra os pedidos de interesse para o gatilho.
  • Aggregation - Calcula o rácio de pedidos que ultrapassaram um determinado limiar.
    • Threshold - Um valor mínimo (em milissegundos) no qual uma violação de solicitação é determinada para ocorrer.
    • Minimum samples - O número mínimo de amostras que devem ser coletadas para que a agregação produza dados, esta configuração é para evitar o desencadeamento de amostras pequenas.
    • Window - Janela de tempo de rolamento (em milissegundos).
  • Threshold - O valor limite (percentagem) aplicado à saída da agregação. Se esse valor for excedido, um perfil será iniciado.

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

Screenshot of request trigger sample

Instalação

As etapas a seguir o orientam na habilitação do componente de criação de perfil no agente e na configuração de limites de recursos que acionam um perfil se violado.

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

    1. Navegue até a seção Performance -> Profiler da instância do Application Insights. Screenshot of the link to open performance pane.Screenshot of the Profiler button from the Performance pane.

    2. Selecione "Triggers"

    3. Configure os gatilhos de CPU, Memória ou Solicitação necessários (se habilitados) e selecione Aplicar. Screenshot of trigger settings

Aviso

O criador de perfil Java não suporta o gatilho "Amostragem". Configurar isso não terá efeito.

Depois que essas etapas forem concluídas, o agente monitorará o uso de recursos do seu processo e acionará um perfil quando o limite for excedido. Quando um perfil é acionado e concluído, ele pode ser visualizado na instância do Application Insights na seção Performance -> Profiler. A partir dessa tela o perfil pode ser baixado, uma vez baixado o arquivo de gravação JFR pode ser aberto e analisado dentro de uma ferramenta de sua escolha, por exemplo Oracle JDK Mission Control (JMC).

Screenshot of profiler page features and settings.

Configuração

A configuração das configurações de acionamento do criador de perfil, como limites e períodos de criação de perfil, é definida na interface do usuário do ApplicationInsights na interface do usuário Performance, Profiler, Triggers, conforme descrito em Installation.

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

Configurando o conteúdo do perfil

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

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

Variáveis de ambiente

  • APPLICATIONINSIGHTS_PREVIEW_PROFILER_ENABLED: booleano (padrão: true) Habilita/desabilita o recurso de criação de perfil. Por padrão, o recurso é ativado dentro do agente (desde o agente 3.4.9). No entanto, mesmo que esse recurso esteja habilitado dentro do 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. Este valor pode ser um de:

  • profile-without-env-data (valor padrão). Um perfil com determinados eventos confidenciais desativados, consulte a seção Aviso para obter detalhes.
  • profile. Usa a configuração que acompanha o profile.jfc 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. Este valor pode ser um de:

  • profile-without-env-data (valor padrão). Um perfil com determinados eventos confidenciais desativados, consulte a seção Aviso para obter detalhes.
  • profile. Usa a configuração jfc que acompanha o profile.jfc 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. Este valor pode ser um de:

  • profile-without-env-data (valor padrão). Um perfil com determinados eventos confidenciais desativados, consulte a seção Aviso para obter detalhes.
  • profile. Usa a configuração jfc que acompanha o profile.jfc 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 acionada com base na configuração da solicitação. Este valor pode ser um de:

  • true A criação de perfil é acionada se um limite de gatilho de solicitação for violado.
  • false (valor padrão). A configuração de solicitação não aciona 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 usando o botão Perfil agora . O valor predefinido é 120.

Perguntas mais frequentes

O que é o Azure Monitor Application Insights Java Profiling?

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

O que é Java Flight Recorder?

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

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

O Java Profiling é um recurso gratuito com o Application Insights. O preço do Azure Monitor Application Insights é baseado no custo de ingestão.

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

Os dados de 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 o App Insights Java Profiling e visualizar os dados?

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

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

'Diagnóstico e recomendações de desempenho' é um novo recurso que estará disponível em breve como Application Insights Java Diagnostics. Pode inscrever-se para pré-visualizar esta funcionalidade. A gravação JFR pode ser visualizada com o Java Mission Control (JMC).

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

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

Use Perfil Agora para a opção de criação de perfil sob demanda. Perfil Agora cria perfis imediatos de todos os agentes que estão anexados à instância do Application Insights.

A criação automatizada de perfis é acionada por uma violação em um limite de recursos.

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

O Application Insights Java Agent atualmente suporta o monitoramento do consumo de CPU e memória. O limite de CPU é configurado como uma porcentagem de todos os núcleos disponíveis na máquina. Memória é a ocupação atual da região de memória permanente (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?

Analise os pré-requisitos na parte superior deste artigo.

Posso usar o Java Profiling para aplicação de microsserviços?

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