Quando uma aplicação Go apresenta alta latência, consumo excessivo de memória ou picos inesperados de CPU em produção, métricas e logs padrão raramente identificam o método ou a linha de código exata responsável. O profiling contínuo no ARMS Application Monitoring captura dados de gargalos de CPU, memória e I/O no nível de nome de método, nome de classe e número de linha. Esse recurso permite otimizar programas, reduzir a latência, aumentar o throughput e economizar custos sem reproduzir problemas localmente.
Pré-requisitos
Antes de começar, verifique se você tem:
Uma aplicação Go monitorada pelo Application Monitoring
Agente do ARMS para Go versão 1.3.0 ou posterior. Para verificar a versão, abra a página de detalhes da aplicação e escolha
Ative o profiling contínuo
Faça login no console do ARMS. No painel de navegação à esquerda, escolha .
-
Na barra de navegação superior, selecione uma região e clique em no nome da sua aplicação.
Os ícones na coluna Language indicam a linguagem da aplicação:
: Java
: Go
: PythonHífen (-): aplicação monitorada no Managed Service for OpenTelemetry.
Na barra de navegação superior, escolha .
-
Na seção Ongoing Profiling Settings, ative a Master switch e outras chaves de tipo de perfil conforme necessário.

Clique em Save. As alterações entram em vigor em até 2 minutos.
Visualize e analisar dados de profiling
Faça login no console do ARMS. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região e clique em no nome da sua aplicação.
Na barra de navegação superior, escolha .
Na lista de instâncias à esquerda, selecione a instância desejada. Em seguida, defina o intervalo de tempo dos dados à direita.
-
Na aba Single View, consulte e analise os dados de profiling:

Selecione a duração do snapshot: na seção Time window size (ícone 1), escolha uma duração e arraste sobre o gráfico de linhas para selecionar um intervalo de tempo.
Escolha o tipo de perfil: na lista suspensa (ícone 2), selecione os dados a visualizar: CPU, heap do Go, Goroutine, Mutex e block.
Analise os resultados: o intervalo de tempo selecionado (ícone 3) preenche o painel de dados. Clique em Aggregate analysis para abrir os detalhes do snapshot.
-
Análise de desempenho
Interpretar a tabela de resultados de profiling
A tabela de resultados de profiling possui duas colunas importantes:
Coluna
Significado
Quando usar
Self
Tempo ou recursos que um método consome em seu próprio código, excluindo chamadas a métodos filhos.
Identifique métodos individualmente custosos.
Total
Tempo ou recursos consumidos por um método, incluindo todas as chamadas a métodos filhos.
Encontre os maiores contribuidores gerais para o uso de recursos.
Localize gargalos com gráficos de chama: no gráfico de chama à direita, procure barras largas na parte inferior. Uma barra larga indica que o método consome uma parcela desproporcional de recursos — geralmente é aí que reside o gargalo. A coluna Self na tabela destaca esses mesmos pontos críticos.
Tipos de perfil
Cada tipo de perfil captura uma dimensão diferente do comportamento de execução da sua aplicação. Selecione o tipo de perfil correspondente ao problema de desempenho investigado.
CPU
Métrica
O que mede
Quando usar
CPU Time
Número de núcleos de CPU solicitados por cada método.
Identifique caminhos de código intensivos em computação que causam alta utilização da CPU.

Memória (heap do Go)
Métrica
O que mede
Quando usar
Allocated Memory
Tamanho da memória solicitada por cada método.
Encontre alocações grandes ou frequentes.
Allocations
Número de solicitações de memória por método.
Detecte métodos que solicitam memória frequentemente, mesmo que as alocações individuais sejam pequenas.


Goroutine

Mutex
Métrica
O que mede
mutexContentions
Eventos de contenção de mutex.
mutexDelay
Tempo de atraso de mutex.


Block
Métrica
O que mede
blockContentions
Eventos de contenção de bloqueio.
blockDelay
Tempo de atraso de bloqueio.


Lista de snapshots
A lista de snapshots exibe todos os snapshots de profiling capturados durante o intervalo de tempo selecionado. Clique em qualquer snapshot para visualizar seus detalhes.
