O monitoramento de JVM no Application Real-Time Monitoring Service (ARMS) exibe métricas de memória em gráficos ao longo do tempo, mas esses dados sozinhos não diagnosticam problemas como vazamentos ou inchaço de memória. Um snapshot de memória captura o estado completo do heap de uma instância JVM em execução em um momento específico e fornece detalhes no nível de objeto necessários para identificar as causas raiz. Recomendamos gerar snapshots de memória e analisar os dados detalhados de uso nos logs.
Pré-requisitos
Antes de começar, verifique se você tem:
Um agente ARMS para Java V2.7.1.2 ou posterior, lançado após 24 de setembro de 2021
Um servidor Linux (apenas servidores Linux oferecem suporte a snapshots de memória)
A permissão AliyunARMSFullAccess concedida ao seu usuário do Resource Access Management (RAM)
Criar um snapshot de memória
Um dump de heap suspende o processo da aplicação. A operação geralmente leva alguns minutos, mas pode durar até meia hora. Tenha cautela ao executar esse procedimento em ambientes de produção.
Faça login no console do ARMS. No painel de navegação à esquerda, escolha Application Monitoring > Application List.
-
Na página Application List, selecione uma região na barra de navegação superior e clique em nome da sua aplicação.
Os ícones na coluna Language indicam a linguagem de programação: -
: Java -
: Go -
: Python - - (hífen): aplicação monitorada pelo Managed Service for OpenTelemetry No painel de navegação à esquerda, clique em Application Details. Na página exibida, clique em aba JVM monitoring.
No canto superior direito da aba JVM monitoring, clique em Create Memory Snapshot.
-
Na caixa de diálogo Create Memory Snapshot, selecione um endereço IP na lista suspensa IP e clique em Save.
Se você já selecionou uma instância na árvore de navegação da página Application Details , o sistema preenche o endereço IP automaticamente.
Na mensagem de confirmação, clique em Force to dump.
Visualizar e analisar resultados do snapshot
-
No canto superior direito da aba JVM monitoring, clique em Historical Snapshots. O painel Number of Snapshot Jobs exibe o status de cada tarefa de snapshot. Para verificar o progresso de uma tarefa específica, localize-a e clique em Details.
Cor
Status
Verde
Bem-sucedido
Azul
Em andamento
Vermelho
Com falha
Localize uma tarefa e clique em Analysis para abrir os resultados no console da Application Troubleshooting Platform (ATP).
Impacto do dump de heap
Os snapshots de memória usam o mecanismo nativo de dump de heap da JVM (jmap -dump:all). Dumps de heap podem consumir memória adicional, acionar pontos seguros e ciclos de coleta de lixo (GC), além de suspender todas as threads externas à JVM. Essa suspensão é ininterruptível.
Avalie cuidadosamente os riscos antes de gerar um snapshot em ambiente de produção.
Compatibilidade de versão do agente ARMS
O recurso de snapshot de memória depende da versão do seu agente ARMS:
|
Versão do agente ARMS |
Ambientes com suporte |
Dependências |
Observações |
|
V2.7.3.5 e anteriores |
Sem suporte para JRE, Java 11 ou Alpine Linux |
Variável de ambiente |
Compatibilidade limitada |
|
V2.8.3 a V3.2.8 |
JRE, Java 8, Java 11 e Alpine Linux |
Variável de ambiente |
Maior compatibilidade |
|
V3.2.9 e posteriores |
— |
Não é necessário adicionar |
Versão recomendada. Para atualizar, consulte Atualizar o agente ARMS |
Acesso ao bucket do Object Storage Service (OSS)
O ARMS envia os dados de snapshot para um bucket do Object Storage Service (OSS) para armazenamento e processamento. Se a VPC onde sua aplicação executa tiver um limite configurado para o número de buckets OSS acessíveis, adicione o bucket de snapshot à sua política de acesso. O nome do bucket segue este formato:
arms-heapdump-<regionId>
Substitua <regionId> pelo ID da sua região. Por exemplo, se sua aplicação executa na região China (Hangzhou), o nome do bucket será arms-heapdump-cn-hangzhou.
Sem acesso a este bucket OSS, a coleta dos dados do snapshot falha.
Retenção de snapshots
Antes de 1º de julho de 2023, o ARMS retinha snapshots históricos indefinidamente. A partir dessa data, o ARMS aplica um limite de retenção de 90 dias para snapshots históricos. Portanto, não é possível salvar snapshots de memória criados há mais de 90 dias. Faça backup dos snapshots regularmente para evitar perda de dados.
Perguntas frequentes
Por que não é possível criar e analisar snapshots automaticamente antes de um erro de falta de memória (OOM)?
Quando uma aplicação se aproxima de um estado OOM, os recursos do sistema ficam criticamente sobrecarregados. Um dump de heap consome muitos recursos e pode desencadear o próprio erro OOM durante esse período.
Em vez disso, configure a JVM para capturar um dump de heap automaticamente quando o erro OOM ocorrer:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/heap.bin
Essas flags instruem a JVM a gravar um dump de heap em /tmp/heap.bin ao ocorrer um OOM.
Em ambientes Kubernetes, mapeie /tmp/heap.bin para um volume de armazenamento persistente a fim de evitar perda de dados devido a reinicializações de pods.
Após a ocorrência do OOM:
Envie o arquivo de dump de heap para um bucket OSS. Para mais detalhes, consulte Introdução ao OSS.
Analise o dump de heap no console da ATP.