Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:Instance monitoring for Java applications

Última atualização: Aug 21, 2026

Quando sua aplicação Java é executada em várias instâncias, identificar qual delas causa degradação de desempenho ou pressão de memória exige visibilidade no nível da instância. Após a instalação do agente do ARMS, o serviço coleta automaticamente métricas de infraestrutura, garbage collection (GC) e memória da JVM por instância. Use a página Instance Monitoring para comparar a integridade das instâncias, identificar gargalos e diagnosticar problemas de memória sem alternar entre ferramentas.

Pré-requisito

Um agente do ARMS deve estar instalado na aplicação.

Importante

O Application Monitoring oferece uma nova página de detalhes da aplicação para usuários que ativaram o novo modo de faturamento. Caso ainda não tenha ativado o novo modo de faturamento, clique em Switch to New Version na página Application List para acessar a nova página de detalhes da aplicação.

Acessar a página Instance Monitoring

  1. Faça login no console do ARMS. No painel de navegação à esquerda, escolha Application Monitoring > Application List.

  2. Selecione uma região no topo da página e clique no nome da aplicação.

  3. Na barra de navegação superior, clique em Instance Monitoring.

Nota

Os ícones na coluna Language indicam o método de integração:

  • Java图标 Aplicação Java integrada ao Application Monitoring

  • image Aplicação Golang integrada ao Application Monitoring

  • image Aplicação Python integrada ao Application Monitoring

  • - Aplicação integrada ao Managed Service for OpenTelemetry

Layout do painel

O painel Instance Monitoring adapta-se ao ambiente de implantação (ECS ou contêineres) e organiza as informações em três áreas:

Área

Descrição

Filtro rápido (1)

Filtra gráficos e a lista de instâncias por endereço do host (e por cluster em ambientes de contêiner com Managed Service for Prometheus).

Gráficos de tendência (2)

Exibe gráficos de séries temporais para métricas de infraestrutura, GC e memória da JVM.

Lista de instâncias (3)

Mostra métricas por instância e permite acessar detalhes ou traces da instância.

Métricas por ambiente

As métricas disponíveis variam conforme a execução da aplicação em ECS ou em contêineres e dependendo da integração do ambiente de contêineres com o Managed Service for Prometheus.

Métricas dos gráficos de tendência

Categoria de métrica

ECS

Contêiner (Prometheus)

Contêiner (coleta automática do ARMS)

Uso de CPU

Sim

Sim

Sim

Uso de memória

Sim

Sim

Sim

Uso de disco

Sim

Não

Não

Full GC e Young GC

Sim

Sim

Sim

Memória heap e non-heap

Sim

Sim

Sim

Em ambientes ECS, use a lista suspensa ao lado do título de cada gráfico de infraestrutura para alternar entre valores médios e máximos.

Nos gráficos de GC, alterne entre contagem de GC e duração média do GC. Nos gráficos de memória da JVM, alterne entre visualizações de memória heap e non-heap.

Colunas da lista de instâncias

Coluna

ECS

Contêiner (Prometheus)

Contêiner (coleta automática do ARMS)

IP da instância

Sim

Sim

Sim

Utilização de CPU

Sim

Sim (+ request, limit)

Sim (apenas uso)

Utilização de memória

Sim

Sim (+ request, limit)

Sim (apenas uso)

Utilização de disco

Sim

Sim (+ limit)

Não

Carga

Sim

Sim

Sim

Contagem de Full GC

Sim

Sim

Sim

Contagem de Young GC

Sim

Sim

Sim

Uso de memória heap

Sim

Sim

Sim

Uso de memória non-heap

Sim

Sim

Sim

Métricas RED (requisições, erros, tempo médio de resposta)

Sim

Sim

Sim

No ambiente Contêiner (Prometheus), os campos de utilização de CPU, memória e disco exibem - quando nenhum limite está definido para o recurso.

Requisitos para ambiente de contêineres

  • Com Managed Service for Prometheus: As métricas de contêiner provêm do Managed Service for Prometheus. Para configurar a integração, consulte Container Observability.

  • Sem Managed Service for Prometheus: Atualize o probe do Application Monitoring para a versão 4.1.0 ou posterior. Versões anteriores do probe não reportam métricas básicas de contêiner. Para obter detalhes sobre versões do probe, consulte Probe (Java Agent) version guide.

Interações com gráficos

Cada gráfico de tendência oferece duas ações:

  • Clique em statistics para visualizar estatísticas de métricas em um intervalo de tempo ou comparar o mesmo período em datas diferentes.

  • Clique em toggle para alternar entre gráficos de colunas e gráficos de tendência.

Ações na lista de instâncias

  • Clique no IP de uma instância (ou em Details na coluna Actions para ambientes de contêiner) para abrir os detalhes da instância.

  • Clique em Trace na coluna Actions para visualizar detalhes do trace. Para mais informações, consulte Trace analysis.

Nota

O ARMS coleta métricas da JVM via JMX. As regiões de memória non-heap reportadas pelo ARMS são menores do que as existentes no processo Java real. Consequentemente, a soma das memórias heap e non-heap no ARMS pode diferir do valor RES exibido pelo comando top. Para obter detalhes, consulte JVM monitoring memory details.

Detalhes da instância

Clique no IP de uma instância para abrir a página de detalhes, que contém as seguintes abas.

Visão geral

A aba Overview exibe a contagem de requisições, contagem de erros, tempo médio de resposta e informações de chamadas lentas para a interface selecionada.

A Host List lateral permite alternar entre hosts para visualizar dados de monitoramento. Os cartões de resumo mostram alterações percentuais dia a dia. Abaixo dos cartões, gráficos de tendência de séries temporais exibem Requests/1m, Errors/1m e Response Time/1m com granularidade de minutos. A página também inclui as abas JVM Monitoring, Host Monitoring e Trace Analysis.

Monitoramento da JVM

A aba JVM Monitoring apresenta métricas de GC, memória, threads e descritores de arquivo para a instância selecionada.

A seção de GC contém os gráficos Full GC Count/1m, Young GC Count/1m, Full GC Trigger Reason/1m e Young GC Trigger Reason/1m. A seção de memória inclui Memory Usage Distribution/1m, Heap Memory/1m, Heap Memory (used)/1m, entre outros. O painel lateral permite selecionar uma instância específica da aplicação para visualizar seus dados de monitoramento.

Monitoramento de pool de threads

O monitoramento de pool de threads rastreia a configuração de threads principais, o status de threads ativas e métricas de execução de tarefas. Filtre os pools de threads por tipo e nome no topo da aba.

Versão do probe 4.1.x ou posterior

Frameworks suportados

Classe do framework

Uso típico

java.util.ThreadPoolExecutor

Tomcat 8 a 9.1, Dubbo, HSF, Vert.x, pools de threads personalizados

org.apache.tomcat.util.threads.ThreadPoolExecutor

Tomcat 9.1 e posteriores

org.eclipse.jetty.util.thread.QueuedThreadPool

Jetty

org.xnio.XnioWorker

Undertow

Métricas coletadas

Métrica

ThreadPoolExecutor (JDK)

ThreadPoolExecutor (Tomcat 9.1+)

QueuedThreadPool

XnioWorker

arms_thread_pool_core_pool_size

Sim

Sim

Sim

Sim

arms_thread_pool_max_pool_size

Sim

Sim

Sim

Sim

arms_thread_pool_active_thread_count

Sim

Sim

Sim

Sim

arms_thread_pool_current_thread_count

Sim

Sim

Sim

--

arms_thread_pool_max_thread_count

Sim

Sim

--

--

arms_thread_pool_scheduled_task_count

Sim

Sim

--

--

arms_thread_pool_completed_task_count

Sim

Sim

--

--

arms_thread_pool_rejected_task_count

Sim

Sim

Sim

--

arms_thread_pool_queue_size

Sim

Sim

Sim

Sim

Versão do probe anterior a 4.1.x

Frameworks suportados: Tomcat, HSF, Dubbo, Vert.x e Undertow. Versões do agente 3.1.x e anteriores suportam apenas Undertow 1.x a 2.0.x. Versões do agente 3.2.x e posteriores suportam todas as versões do Undertow.

Métrica

Descrição

arms_threadpool_core_size

Contagem de threads principais

arms_threadpool_max_size

Contagem máxima de threads

arms_threadpool_active_size

Contagem de threads ativas

arms_threadpool_queue_size

Tamanho da fila

arms_threadpool_current_size

Tamanho atual do pool

Pools de threads do SchedulerX reportam apenas arms_threadpool_active_size.

Monitoramento de pool de conexões

O monitoramento de pool de conexões rastreia a configuração de inicialização e o status das conexões em tempo de execução. Filtre os pools de conexões por tipo no topo da aba.

Versão do probe 4.1.x ou posterior

Frameworks suportados: DBCP (>2,0), Vibur DBCP (>11,0), c3p0 (>0,9.2), Druid, HikariCP (>3,0), Jedis (>3,0), Lettuce (>5,0), Redisson (>3,0), tomcat-dbcp (>8,0), tomcat-jdbc (>8,0).

Métricas coletadas

Métrica

Descrição

Frameworks suportados

arms_connection_pool_connection_count

Contagem de conexões (ativas vs. ociosas por estado)

DBCP, c3p0, Vibur DBCP, Druid, HikariCP, Jedis, Lettuce, Redisson, tomcat-dbcp, tomcat-jdbc

arms_connection_pool_connection_min_idle_count

Mínimo de conexões ociosas (configuração estática)

DBCP, Jedis, Druid, HikariCP, Lettuce, tomcat-dbcp, tomcat-jdbc

arms_connection_pool_connection_max_idle_count

Máximo de conexões ociosas (configuração estática)

DBCP, Jedis, Druid, Lettuce, tomcat-dbcp, tomcat-jdbc

arms_connection_pool_connection_max_count

Máximo de conexões (configuração estática)

DBCP, Druid, Vibur DBCP, HikariCP, tomcat-dbcp, tomcat-jdbc

arms_connection_pool_pending_request_count

Requisições de conexão bloqueadas

c3p0, HikariCP, Jedis, tomcat-dbcp, tomcat-jdbc

Versão do probe anterior a 4.1.x

Framework

Métricas coletadas

okHttp2 / okHttp3

arms_threadpool_active_size, arms_threadpool_current_size

Apache HttpClient

arms_threadpool_current_size, arms_threadpool_max_size, arms_threadpool_queue_size

Druid

arms_threadpool_active_size, arms_threadpool_max_size

HikariCP

arms_threadpool_active_size, arms_threadpool_max_size

Monitoramento de host

A aba Host Monitoring exibe métricas de CPU, memória, disco, carga, tráfego de rede e pacotes de rede.

Host monitoring

Monitoramento de contêineres

A aba Container Monitoring apresenta métricas de recursos no nível do contêiner. As métricas disponíveis dependem do método de integração:

Integração

Métricas

Configuração

Managed Service for Prometheus

CPU, memória, disco, carga, tráfego de rede, pacotes de rede

Consulte Prometheus instance for Container Service

Coleta automática do ARMS (probe 4.1.0+)

CPU, memória, tráfego de rede

Atualize o probe para 4.1.0 ou posterior. Consulte Probe (Java Agent) version guide

A aba Container Monitoring mostra uma área de Visão Geral com Namespace, Cluster e métricas resumidas de CPU (cores) e Média/Máx/Últ/Limite de Memória. Abaixo, a área de Recursos contém os quatro gráficos de linha a seguir:

  • Memory/Limit(%)

  • Memory Usage

  • CPU Usage(%)

  • CPU Usage By Cores (com curvas user/system/total)

Análise de traces

A análise de traces consulta dados armazenados em tempo real. Combine filtros e dimensões de agregação para diagnosticar problemas de desempenho em diferentes cenários. Para obter detalhes, consulte Trace analysis.

No console de Tracing, insira critérios de busca como serviceName: "mall-gateway" para consultar dados de trace. A página contém:

  • Painel de filtro rápido à esquerda: filtre por Status, Duration (intervalo deslizante de 0ns–5s), Interface Name e Host Address.

  • Gráficos estatísticos superiores: histograma de Call Count, histograma de Errors/HTTP Errors, gráfico de linha de Average Duration.

  • Tabela de dados de Span inferior: as colunas incluem TraceId, Interface Name, Application Name, Duration, Status, Start Time, Host Address. Clique em Details ou Logs para visualizar detalhes do trace.

  • Painel Slow Trace Analysis à direita: exibe os principais spanNames por contribuição de duração.

Agregação de métricas no nível da aplicação vs. instância

Ao agregar métricas de nível de instância em valores de nível de aplicação, o ARMS utiliza métodos diferentes dependendo do tipo de métrica:

Tipo de métrica

Método de agregação

RED: contagem de requisições, chamadas lentas, códigos de status HTTP

Soma

RED: tempo de resposta

Média

JVM: contagem de GC, duração de GC

Soma

JVM: memória heap, contagem de threads

Máximo

Pool de threads e pool de conexões: todas as métricas

Média

Métricas de sistema: todas as métricas

Máximo

SQL e NoSQL: contagens de chamadas

Soma

SQL e NoSQL: outras métricas

Média

Exceções: todas as métricas

Soma

Referências

Para obter a lista completa de métricas do Application Monitoring, consulte Application Monitoring metrics reference.

Perguntas frequentes

Por que o tráfego está desigual entre as instâncias?

Na versão 3.x do probe, ativar a otimização de memória pode causar a perda de algumas métricas. Atualize para a versão 4.x do probe.

Por que uma única requisição do Undertow é contada duas vezes?

Em versões do probe anteriores a 3.2.x, a instrumentação do DeferredResult faz com que uma chamada seja registrada duas vezes. Atualize para a versão 3.2.x ou posterior do probe.

Por que as cotas de CPU ou memória no Monitoramento de Contêineres não correspondem às configurações do Pod?

Verifique se o Pod define múltiplos contêineres. Essa métrica representa a soma das cotas de todos os contêineres no Pod.

Por que algumas métricas de sistema estão ausentes, imprecisas ou mostrando 100% de uso de CPU?

Versões do probe anteriores a 4.x não coletam métricas de sistema no Windows. Atualize para a versão 4.x ou posterior do probe.

Por que ocorre Full GC logo após a inicialização da aplicação?

O tamanho padrão do metaspace é de cerca de 20 MB. Durante a inicialização, a expansão do metaspace aciona o Full GC. Defina os tamanhos inicial e máximo do metaspace usando os parâmetros -XX:MetaspaceSize e -XX:MaxMetaspaceSize.

Como a VM Stack é calculada?

A VM Stack é calculada multiplicando o número de threads ativas por 1 MB (tamanho padrão da stack de thread). Se você definir um tamanho diferente de stack com -Xss, essa métrica pode não corresponder ao valor real.

Nota

state=live inclui os seguintes estados: live, blocked, new, runnable, timed-wait e wait.

Como as métricas da JVM são coletadas?

O ARMS obtém métricas da JVM usando interfaces padrão do JDK.

Métricas de memória:

  • ManagementFactory.getMemoryPoolMXBeans

  • java.lang.management.MemoryPoolMXBean#getUsage

Métricas de GC (probe anterior a 4.4.0):

  • ManagementFactory.getGarbageCollectorMXBeans

  • GarbageCollectorMXBean#getCollectionCount

  • GarbageCollectorMXBean#getCollectionTime

Métricas de GC (probe 4.4.0 ou posterior):

Obtidas através da assinatura do evento GarbageCollectionNotificationInfo do GarbageCollectorMXBean.

Por que o valor máximo de memória heap da JVM é -1?

Um valor de -1 indica que o tamanho máximo do heap não foi configurado. Defina-o usando o parâmetro -Xmx.

Por que o uso de memória heap da JVM não é igual ao tamanho máximo da memória heap?

O parâmetro -Xms define o tamanho inicial do heap. A JVM expande o heap conforme necessário, até o máximo definido por -Xmx. Uma discrepância significa que o heap ainda não se expandiu totalmente.

Por que a frequência de GC da JVM aumenta gradualmente?

Isso geralmente ocorre com o ParallelGC, algoritmo padrão de GC no JDK 8. O ParallelGC ativa -XX:+UseAdaptiveSizePolicy por padrão, ajustando dinamicamente o dimensionamento do heap. Quando o Young GC executa frequentemente, o espaço survivor pode encolher, fazendo com que objetos sejam promovidos para a geração antiga mais rapidamente. Isso acelera o crescimento da geração antiga e aciona Full GCs mais frequentes. Para obter detalhes, consulte a documentação de Ergonomia de GC do Java.

Por que não há dados para monitoramento de pool de threads ou pool de conexões?

  1. Na página Custom Configuration, em Advanced Settings, confirme se o monitoramento de pool de threads e pool de conexões está ativado.

  2. Verifique se o framework é suportado. Consulte Thread pool and connection pool monitoring.

Por que a contagem máxima de conexões do HikariCP não corresponde ao esperado?

Versões do probe anteriores a 3.2.x recuperam incorretamente a contagem máxima de conexões. Atualize para a versão 3.2.x ou posterior do probe.

Por que as métricas de monitoramento de pooling aparecem como valores decimais?

O probe coleta dados a cada 15 segundos. O console exibe a média durante o intervalo de tempo selecionado. Por exemplo, se quatro pontos de dados em um minuto forem 0, 0, 1 e 0, o valor exibido será 0,25.

Por que pools de threads ou conexões estão cheios, mas o monitoramento não mostra alteração?

O ARMS coleta métricas de pool de threads e pool de conexões a cada 15 segundos. Picos de curta duração dentro desse intervalo podem não ser capturados.

Por que a contagem máxima de threads do pool é inesperada ou mostra 2,1 bilhões?

O ARMS lê a contagem máxima de threads diretamente do objeto do pool de threads. Um valor de 2,1 bilhões normalmente indica um pool de threads agendados, cujo padrão é Integer.MAX_VALUE.

/**
 * Creates a new ScheduledThreadPoolExecutor with the given core pool size.
 * @param corePoolSize the number of threads to keep in the pool, even if they are idle,
 *        unless allowCoreThreadTimeOut is set
 * @throws IllegalArgumentException if corePoolSize < 0
 */
public ScheduledThreadPoolExecutor(int corePoolSize) {
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
            new DelayedWorkQueue());
}

/**
 * Creates a new ScheduledThreadPoolExecutor with the given initial parameters.
 * @param corePoolSize the number of threads to keep in the pool, even if they are idle,
 *        unless allowCoreThreadTimeOut is set
 * @param threadFactory the factory to use when the executor creates a new thread
 * @throws IllegalArgumentException if corePoolSize < 0
 * @throws NullPointerException if threadFactory is null
 */
public ScheduledThreadPoolExecutor(int corePoolSize,
                        ThreadFactory threadFactory) {
    super(corePoolSize, Integer.MAX_VALUE, 0, NANOSECONDS,
            new DelayedWorkQueue(), threadFactory);
}

Por que as métricas do pool de threads do Tomcat não correspondem ao esperado?

Se múltiplas métricas (contagem máxima de threads, contagem de threads ativas, contagem de threads principais) diferirem dos valores esperados, verifique se a aplicação expõe serviços do Tomcat em várias portas. Por exemplo, o Spring Actuator abre uma porta extra para métricas. Nesse caso, o ARMS pode mesclar métricas de vários pools de threads devido à convergência de dimensões.

Para corrigir isso, atualize para a versão 4.1.10 ou posterior do probe. Em seguida, acesse Application Configuration > Custom Configuration > Pooling Monitoring Configuration e defina Thread Pool Thread Name Pattern Extraction Strategy como Replace trailing digits with *.

Por que não há dados para um pool de threads ou conexões antes de determinado horário?

Isso ocorre quando uma tarefa agendada cria o pool. Os dados aparecem somente após a tarefa inicializar o pool. Métricas baseadas em tráfego, como contagens de requisições de API, comportam-se de maneira similar.

Por que não há dados para pools de conexões do HttpClient?

A partir da versão 4.x do probe do ARMS, o monitoramento de pool de conexões para OkHttp3 e Apache HttpClient não é mais suportado. Esses frameworks criam um pool de conexões separado para cada domínio externo. Quando muitos domínios estão envolvidos, isso causa sobrecarga excessiva e riscos de estabilidade.

Por que não há dados de monitoramento de contêineres após integrar uma aplicação ACK?

O ARMS exibe dados de monitoramento de contêineres apenas para recursos na mesma conta Alibaba Cloud. Verifique se a conta usada para criar o cluster ACK corresponde à conta usada para a integração com o ARMS.

Por que a taxa de abertura de handles de arquivo é diferente de zero, mas a contagem de handles é zero?

Isso ocorre no JDK 9 ou posterior ao usar a versão 3.x do probe do ARMS. Atualize para a versão 4.2.2 ou posterior do probe. Consulte Upgrade the ARMS agent.

Por que o uso de memória física do processo JVM difere significativamente do uso de memória heap no monitoramento da JVM?

Provavelmente o processo JVM usa uma quantidade significativa de memória off-heap, que o ARMS não monitora completamente. Para obter detalhes sobre quais áreas de memória da JVM o ARMS cobre, consulte JVM monitoring memory details.

Por que o Druid mostra mais conexões ociosas do que a configuração máxima de conexões ociosas?

O parâmetro MaxIdle no Druid existe apenas para compatibilidade de migração do DBCP. Ele não tem efeito funcional.

Por que não há dados após atualizar algumas instâncias para a versão mais recente do probe?

Ao atualizar de uma versão do probe anterior a 4.1.x, todas as instâncias devem ser atualizadas. A página se adapta automaticamente depois que todas as instâncias executarem a mesma versão.