O recurso memory hotspot do Application Real-Time Monitoring Service (ARMS) identifica as causas raiz do alto uso de memória heap da Java Virtual Machine (JVM). Ele usa continuous profiling para registrar o tamanho e a frequência das alocações de memória sempre que uma thread excede o limiar de alocação de heap e captura um snapshot da pilha de métodos nesse momento. Quando o sistema apresenta alta utilização de memória heap da JVM, o memory hotspot localiza rapidamente os métodos específicos de lógica de negócios que causam solicitações grandes ou frequentes de memória heap.
Ative memory hotspot
Faça login no console do ARMS. No painel de navegação à esquerda, escolha .
-
Na página Application List, selecione uma região na parte superior e clique em nome da aplicação.
NotaOs ícones na coluna Language indicam o seguinte:
: aplicação Java conectada ao Application Monitoring.
: aplicação Go 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 Configuration.
Na seção Continuous profiling, ative o Main switch e o switch Memory hotspot. Especifique os endereços IP das instâncias da aplicação a serem ativadas ou um bloco CIDR para um grupo de instâncias.
-
Na parte inferior da página, clique em Save.
As alterações entram em vigor imediatamente. Não é necessário reiniciar a aplicação.
Visualize dados do memory hotspot
Exemplo: método que aloca 1 MB de memória heap por segundo.
public class FixedRateAllocAction {
// The entry point for the request.
public void runBusiness() {
try {
sink = new byte[1024];
} catch (InterruptedException e) {
// Ignore
}
}
}
Faça login no console do ARMS. No painel de navegação à esquerda, escolha .
-
Na página Application List, selecione uma região na parte superior e clique em nome da aplicação.
NotaOs ícones na coluna Language indicam o seguinte:
: aplicação Java conectada ao Application Monitoring.
: aplicação Go 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. Selecione a instância desejada na lista de instâncias à esquerda. Em seguida, defina o intervalo de tempo dos dados à direita.
Na aba Single View, filtre os dados e visualize a análise agregada.
-
Clique em Aggregation & Analysis. Na página exibida, defina Profiling Type como Allocated Memory.
NotaTipos de profiling:
CPU Time: dados de profiling de hotspot de CPU. Para mais informações, consulte Diagnose high CPU utilization with CPU hotspot.
Allocated Memory: dados de profiling de memory hotspot referentes ao volume de alocação.
Allocations: dados de profiling de memory hotspot referentes à frequência de alocação. Útil para identificar quais métodos solicitam memória com frequência.
Na página Aggregation & Analysis, a lista à esquerda mostra o volume de alocação de memória heap de todos os métodos envolvidos nesta chamada. O gráfico de chama à direita é gerado a partir dos rastreamentos de pilha desses métodos. As colunas têm as seguintes definições:
A coluna Self exibe os recursos consumidos diretamente por um método, excluindo seus métodos filhos. Isso facilita a identificação de métodos com consumo significativo de recursos.
A coluna Total apresenta o consumo combinado de um método e de seus métodos filhos. Permite localizar os maiores contribuidores para o consumo de recursos na pilha de chamadas.
Execute a seguinte análise:
Ordene a coluna Self em ordem decrescente. Localize e clique em método com o maior valor de Self, com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness(). O gráfico de chama à direita focará nos métodos relevantes.
No gráfico de chama focado à direita, com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() aparece como o quadro mais largo no topo.
Um quadro largo no topo do gráfico de chama representa um método definido pela aplicação. Isso indica que o método com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() é um gargalo de desempenho significativo que consumiu recursos substanciais durante o profiling. Use o nome do método para examinar sua lógica de negócios em busca de oportunidades de otimização.
Com base nessa análise, o método com.alibaba.cloud.pressure.memory.FixedRateAllocAction.runBusiness() alocou 56,56 MB de memória heap em um minuto, o que corresponde ao exemplo apresentado.
Referências
Use o recurso de continuous profiling para investigar traces lentos e alta utilização de CPU. Para mais informações, consulte os seguintes tópicos:
Para problemas comuns relacionados ao continuous profiling, consulte FAQ.