Todos os produtos
Search
Central de documentação

Application Real-Time Monitoring Service:JVM metrics

Última atualização: Sep 12, 2026

O agente do ARMS coleta métricas da JVM em cinco categorias: memória, garbage collection (GC), threads, classes e descritores de arquivos. A obtenção de todas as métricas ocorre por meio das interfaces padrão de gerenciamento do JDK (java.lang.management) em intervalos regulares.

As seções a seguir detalham, para cada métrica, o método de coleta, o nome reportado, o tipo, a unidade, as dimensões e a API subjacente do JDK.

Métricas de memória

O agente do ARMS chama periodicamente ManagementFactory.getPlatformMXBeans(MemoryPoolMXBean.class) para obter o uso de memória de cada pool da JVM.

Cada MemoryPoolMXBean reporta os tamanhos inicial, máximo, committed e utilizado de um espaço de memória específico. Para consultar esses valores diretamente:

public static void printCurrentJVMMemoryUsage() {
    List<MemoryPoolMXBean> beans = ManagementFactory.getPlatformMXBeans(MemoryPoolMXBean.class);
    for (MemoryPoolMXBean bean : beans) {
        System.out.printf("area=%s\tname=%s\tinitial=%d\tmax=%d\tcommited=%d\tuse=%d\n", bean.getType().name(),
                bean.getName(), bean.getUsage().getInit(), bean.getUsage().getMax(), bean.getUsage().getCommitted(), bean.getUsage().getUsed());
    }
}

Exemplo de saída (varia conforme a versão da JVM):

area=NON_HEAP	name=Code Cache	initial=2555904	max=134217728	commited=3211264	use=3139712
area=NON_HEAP	name=Metaspace	initial=0	max=-1	commited=8388608	use=7950584
area=NON_HEAP	name=Compressed Class Space	initial=0	max=1073741824	commited=1048576	use=919408
area=HEAP	name=PS Eden Space	initial=67108864	max=1409286144	commited=67108864	use=39057856
area=HEAP	name=PS Survivor Space	initial=11010048	max=11010048	commited=11010048	use=0
area=HEAP	name=PS Old Gen	initial=179306496	max=2863661056	commited=179306496	use=0

O agente reporta esses valores diretamente, sem processamento adicional.

Métricas reportadas

Métrica

Tipo

Unidade

Descrição

arms_jvm_mem_init_bytes

Gauge

Bytes

Tamanho inicial de memória solicitado pela JVM.

arms_jvm_mem_max_bytes

Gauge

Bytes

Tamanho máximo de memória disponível.

arms_jvm_mem_committed_bytes

Gauge

Bytes

Memória committed à JVM pelo sistema operacional.

arms_jvm_mem_used_bytes

Gauge

Bytes

Memória atualmente em uso.

Dimensões

Dimensão

Descrição

Valores de exemplo

area

Tipo de espaço de memória.

heap, nonheap

id

Nome do espaço de memória.

eden, survivor, total

Para obter detalhes sobre os espaços de memória da JVM, consulte JVM memory details.

Métricas de GC

O método de coleta depende da versão do seu agente:

  • Antes da V4.4.0: Uma tarefa agendada consulta ManagementFactory.getPlatformMXBeans(GarbageCollectorMXBean.class).

  • V4.4.0 e posteriores: O agente assina eventos de GarbageCollectionNotificationInfo para coleta em tempo real.

Cada GarbageCollectorMXBean reporta contagens e durações acumuladas de GC desde a inicialização da JVM. Para consultar esses valores diretamente:

public static void printGC() {
    List<GarbageCollectorMXBean> beans = ManagementFactory.getPlatformMXBeans(GarbageCollectorMXBean.class);
    for (GarbageCollectorMXBean  bean : beans) {
        System.out.printf("name=%s\tgcCount=%d\tgcTime=%d\n", bean.getName(),
                bean.getCollectionCount(), bean.getCollectionTime());
    }
}

Exemplo de saída (varia conforme a versão da JVM):

name=PS Scavenge	gcCount=0	gcTime=0
name=PS MarkSweep	gcCount=0	gcTime=0

Como esses valores são acumulados desde a inicialização da JVM, o agente calcula o delta entre coletas consecutivas (intervalo padrão: 15 segundos). Ele reporta as contagens e durações por intervalo.

Métricas reportadas

Métrica

Tipo

Unidade

Descrição

arms_jvm_gc_delta

Gauge (delta)

Contagem

Número de ocorrências de GC no intervalo de coleta atual.

arms_jvm_gc_seconds_delta

Gauge (delta)

Segundos

Tempo de GC consumido no intervalo de coleta atual.

Dimensões

Dimensão

Descrição

Valores de exemplo

gen

Tipo de geração do GC.

young, old

cause

Motivo do acionamento do GC (V4.4.0+).

System.gc(), Heap Dump Initiated GC, Allocation FailureVisualizar descrições dos valores

Mapeamento de nomes de garbage collectors

O agente do ARMS mapeia os nomes reais dos garbage collectors para valores padronizados da dimensão gen para simplificar a análise.

Coletores padrão

Nome do garbage collector

**Valor de gen**

Copy

young

G1 Young Gen

young

G1 Old Gen

old

G1 Young Generation

young

G1 Old Generation

old

ParNew

young

ConMarkSweep

old

ConcurrentMarkSweep

old

PS Scavenge

young

PS MarkSweep

old

PS Serial

young

MarkSweepCompact

old

Coletores ZGC

O ZGC utiliza um design fundamentalmente diferente que não se encaixa na classificação tradicional young/old. O agente do ARMS mapeia os coletores ZGC separadamente:

Nome do garbage collector

**Valor de gen**

ZGC Cycles

cycles

ZGC Pauses

pauses

ZGC Minor Cycles

young_cycles

ZGC Minor Pauses

young_pauses

ZGC Major Cycles

old_cycles

ZGC Major Pauses

old_pauses

Gráfico de uso de stack de threads

O console do ARMS exibe um gráfico de Thread Stack Usage. O agente não coleta essa métrica. Em vez disso, o valor corresponde à contagem atual de threads ativas multiplicada por 1 MB. Esse é o tamanho padrão de stack por thread que a JVM aloca para tabelas de variáveis locais, stacks de operandos, links dinâmicos e endereços de retorno de métodos.

image.png

Métricas de threads

O agente do ARMS chama periodicamente ManagementFactory.getThreadMXBean() para obter as contagens de threads.

A instância retornada de ThreadMXBean fornece a contagem acumulada de threads iniciadas, a contagem atual de threads ativas e a contagem de threads daemon. O agente também conta as threads ativas por estado: RUNNABLE, BLOCKED, WAITING e TIMED_WAITING.

Para consultar esses valores diretamente:

public static void printThreads() {
    ThreadMXBean threadMXBean = java.lang.management.ManagementFactory.getThreadMXBean();
    int threadCount = threadMXBean.getThreadCount();
    int daemonThreadCount = threadMXBean.getDaemonThreadCount();
    long totalStartedThreadCount = threadMXBean.getTotalStartedThreadCount();
    long terminatedThreadCount = totalStartedThreadCount - threadCount;
    System.out.printf("allStartedThreadCount=%d\tcurrentThreadCount=%d\tdaemonThreadCount=%d\tterminatedThreadCount=%d\n"
            , totalStartedThreadCount, threadCount, daemonThreadCount, terminatedThreadCount);
}

Exemplo de saída (varia conforme a versão da JVM):

allStartedThreadCount=5	currentThreadCount=5	daemonThreadCount=4	terminatedThreadCount=0

A contagem de threads finalizadas equivale à contagem acumulada de threads iniciadas menos a contagem atual de threads ativas. Todos os outros valores vêm diretamente do ThreadMXBean. O agente reporta esses valores sem processamento adicional.

Métricas reportadas

Métrica

Tipo

Unidade

Descrição

arms_jvm_threads_count

Gauge

Contagem

Contagem de threads por estado.

Dimensões

A dimensão state distingue as categorias de threads:

**Valor de state**

Descrição

live

Total de threads ativas.

daemon

Threads daemon.

terminated

Threads finalizadas (somente agente ARMS 4.x).

new

Threads no estado NEW.

runnable

Threads no estado RUNNABLE.

blocked

Threads no estado BLOCKED.

wait

Threads no estado WAITING.

timed-wait

Threads no estado TIMED_WAITING.

Métricas de carregamento de classes

O agente do ARMS chama periodicamente ManagementFactory.getClassLoadingMXBean() para obter as contagens de carregamento de classes.

O ClassLoadingMXBean retornado fornece as contagens acumuladas de classes carregadas e descarregadas desde a inicialização da JVM. Para consultar esses valores diretamente:

public static void printCurrentJVMMemoryUsage() {
    ClassLoadingMXBean classLoaderMXBean = ManagementFactory.getClassLoadingMXBean();
    long totalLoadedClassCount = classLoaderMXBean.getTotalLoadedClassCount();
    long unloadedClassCount = classLoaderMXBean.getUnloadedClassCount();
    System.out.printf("totalLoadedClassCount=%d\tunloadedClassCount=%d\n"
            , totalLoadedClassCount, unloadedClassCount);
}

Exemplo de saída (varia conforme a versão da JVM):

totalLoadedClassCount=1355	unloadedClassCount=0

Como esses valores são acumulados desde a inicialização da JVM, o agente calcula o delta entre coletas consecutivas (intervalo padrão: 15 segundos) para reportar as contagens por intervalo.

Métricas reportadas

Métrica

Tipo

Unidade

Descrição

arms_class_load_loaded

Gauge (delta)

Contagem

Número de classes carregadas no intervalo de coleta atual.

arms_class_load_un_loaded

Gauge (delta)

Contagem

Número de classes descarregadas no intervalo de coleta atual.

Métricas de descritores de arquivos

O agente do ARMS chama periodicamente ManagementFactory.getOperatingSystemMXBean() para obter o uso de descritores de arquivos. Essa métrica está disponível apenas em sistemas baseados em Unix, onde o bean é uma instância de UnixOperatingSystemMXBean.

Para consultar esses valores diretamente:

public static void printFDUsage() {
    OperatingSystemMXBean operatingSystemMXBean = ManagementFactory.getOperatingSystemMXBean();
    if (!(operatingSystemMXBean instanceof UnixOperatingSystemMXBean)) {
        return;
    }
    long openFDCount = ((UnixOperatingSystemMXBean) operatingSystemMXBean).getOpenFileDescriptorCount();
    long maxFDCount = ((UnixOperatingSystemMXBean) operatingSystemMXBean).getMaxFileDescriptorCount();
    System.out.printf("openFDCount=%d\tfdOpenRatio=%f\n"
            , openFDCount, (double) openFDCount / maxFDCount);
}

Exemplo de saída (varia conforme a versão da JVM):

openFDCount=184	fdOpenRatio=0.017969

A taxa de abertura é calculada como openFileDescriptorCount / maxFileDescriptorCount. O agente reporta esses valores sem processamento adicional.

Métricas reportadas

Métrica

Tipo

Unidade

Descrição

arms_file_desc_open_count

Gauge

Contagem

Número de descritores de arquivos atualmente abertos.

arms_file_desc_open_ratio

Gauge

Taxa (0-1)

Proporção de descritores de arquivos abertos em relação ao máximo permitido.