O continuous profiling identifica gargalos de CPU, memória e I/O em aplicações Java. O recurso fornece estatísticas detalhadas por nome de método, classe e número de linha, o que ajuda a localizar métodos que consomem muitos recursos, otimizar código, reduzir latência, aumentar o throughput e diminuir custos de infraestrutura. Este tópico descreve como ativar o continuous profiling no ARMS e visualizar os dados de profiling.
O continuous profiling gera sobrecarga mínima de desempenho. Em benchmarks de uma aplicação Spring Web convencional com todos os recursos ativados, a utilização da CPU aumentou cerca de 5%, o uso de memória off-heap cresceu aproximadamente 50 MB e não houve aumento significativo na latência do GC nem das requisições. Para resultados detalhados, consulte Performance test report of the continuous profiling feature for ARMS Java agent v4.x.
Pré-requisitos
Apenas a Pro Edition e o modo de faturamento pay-by-observable-data oferecem suporte ao continuous profiling. Para ativar a Pro Edition, consulte Pay-as-you-go. Para mudar para o modo de faturamento pay-by-observable-data, consulte Billing.
Os dados de continuous profiling são retidos por 7 dias.
A aplicação deve estar conectada ao ARMS Application Monitoring com o agente na versão v2.7.3.5 ou posterior. Para obter instruções sobre a conexão, consulte Application Monitoring overview. Para atualizar o agente, consulte Update the ARMS agent.
Se a vpc da aplicação tiver uma política de controle de acesso que restrinja buckets do oss, conceda permissão ao bucket de profiling do ARMS. O continuous profiling envia dados coletados para um bucket centralizado do ARMS oss para armazenamento e processamento; sem esse acesso, a coleta falha. Adicione o bucket
arms-profiling-<regionId>às regras da política. Substitua<regionId>pelo ID da região da aplicação. Por exemplo, se a aplicação estiver implantada na região China (Hangzhou), o bucket seráarms-profiling-cn-hangzhou.Atualmente, o continuous profiling oferece suporte apenas a OpenJDK e Oracle JDK. IBM OpenJ9 e Oracle GraalVM JDK não são suportados.
Limitações
Kernel do sistema operacional
Linux 2.6.32-431.23.3.el6.x86_64 ou posterior.
Execute o comando uname -r para verificar a versão do kernel.
Versão do JDK
O continuous profiling do ARMS usa a Java Virtual Machine Tool Interface (JVM TI) para capturar a pilha de métodos da aplicação e fornecer detalhes sobre o uso de CPU e memória durante a execução. A JVM TI tem um problema conhecido de falha que pode encerrar a aplicação inesperadamente. Esse problema foi corrigido nas versões OpenJDK 8u352, 11.0.17, 17.0.5 e posteriores, além das versões Oracle JDK 11.0.21, 17.0.9 e posteriores. Testes extensivos do ARMS indicam que, em versões do JDK sem a correção, o problema ocorre apenas em cenários raros. Por isso, o ARMS não desativa automaticamente o continuous profiling caso a versão do JDK não esteja na lista recomendada. É possível ativar o recurso temporariamente e limitar seu escopo por endereço IP da aplicação. No entanto, para garantir máxima estabilidade, atualize para uma versão do JDK suportada. O uso do continuous profiling em versões mais antigas do JDK apresenta risco de falhas na aplicação.
O continuous profiling depende da presença de símbolos de depuração no JDK. Imagens base Alpine removem esses símbolos para reduzir tamanho, o que impede o funcionamento do recurso. Se você pretende usar o continuous profiling, utilize uma imagem base diferente de Alpine.
Versões recomendadas do JDK para continuous profiling:
|
Tipo |
Versão |
|
OpenJDK |
|
|
Oracle JDK |
|
Ativar continuous profiling no console do ARMS
Faça logon no console do ARMS. No painel de navegação à esquerda, escolha .
-
Na página Application List, selecione a região na barra de navegação superior e clique em nome da aplicação.
NotaOs ícones na coluna Language têm os seguintes significados:
: aplicação Java conectada ao Application Monitoring.
: aplicação Golang conectada ao Application Monitoring.
: aplicação Python conectada ao Application Monitoring.-: aplicação conectada ao Managed Service for OpenTelemetry.
No painel de navegação à esquerda, clique em Application Settings e, em seguida, clique em aba Custom Configurations.
Na aba Custom Configurations, na seção Continuous profiling, ative o Main Switch e configure a IP white list ou o network segment address.
No canto inferior esquerdo da aba Custom Configurations, clique em Save.
Visualizar dados de profiling
Faça logon no console do ARMS. No painel de navegação à esquerda, escolha .
-
Na página Application List, selecione a região na barra de navegação superior e clique em nome da aplicação.
NotaOs ícones na coluna Language têm os seguintes significados:
: aplicação Java conectada ao Application Monitoring.
: aplicação Golang conectada ao Application Monitoring.
: aplicação Python conectada ao Application Monitoring.-: aplicação conectada ao Managed Service for OpenTelemetry.
No painel de navegação à esquerda, clique em Continuous profiling.
Na lista de instâncias à esquerda, selecione a instância desejada. Em seguida, defina o intervalo de tempo dos dados à direita.
-
Na aba Search, filtre os dados e execute uma análise agregada.
Na área Time window size, selecione uma duração de snapshot e, em seguida, clique e arraste no gráfico para definir um intervalo de tempo.
Na lista suspensa, selecione um tipo de dado: CPU, JVM Heap ou JVM GC.
-
A lista de dados exibe as informações do intervalo de tempo selecionado. Clique em Aggregation & Analysis no canto superior direito para visualizar os detalhes do snapshot.
A página de detalhes do snapshot possui três abas na parte superior: Performance Analysis, Metrics e Snapshots. Na aba Performance Analysis, selecione um tipo de análise (como CPU Time) na lista suspensa e alterne entre as visualizações usando os botões Table, Both e Flamegraph. No modo Both, o lado esquerdo mostra uma tabela de custo de métodos (com colunas Location, Self e Total), enquanto o lado direito exibe um flame graph.
A coluna Self indica o tempo ou os recursos consumidos por um método, excluindo as chamadas aos seus métodos filhos. Use esta coluna para identificar métodos individualmente custosos.
A coluna Total apresenta o tempo ou os recursos consumidos por um método, incluindo todas as chamadas aos seus métodos filhos. Use esta coluna para encontrar caminhos de chamada que mais contribuem para o uso geral de recursos.
Para solucionar problemas específicos de código crítico, concentre-se na coluna Self ou inspecione os quadros largos na parte inferior do flame graph à direita. Um quadro largo na base geralmente indica um método intensivo em recursos que causa alto consumo nas camadas superiores da pilha. Esses quadros frequentemente representam gargalos do sistema e devem ser o foco principal da otimização.
Figura 2. Métricas

A aba Snapshots exibe métricas detalhadas para cada snapshot em uma tabela. As colunas incluem:
Hora
Tamanho do snapshot
CPU CORES
Alocações de memória
Memória (TLAB)
A aba Compare permite comparar e analisar dados de dois intervalos de tempo diferentes ou configurações de filtro distintas.
Documentos relacionados
Use o continuous profiling para solucionar problemas de alta utilização de CPU e memória. Para mais informações, consulte os seguintes tópicos:
Para problemas comuns ao usar o continuous profiling, consulte FAQ.