Introdução ao jstat
jstat (JVM Statistics Monitoring Tool): Uma ferramenta de linha de comando para monitorar várias informações de status de execução de máquinas virtuais. Ele pode exibir dados em execução, como carregamento de classe, memória, coleta de lixo, compilação JIT, etc. no processo da máquina virtual local ou remota.
Os parâmetros da opção são os seguintes:
Tipos de | contente | ilustrar |
---|---|---|
Carregamento de classe relacionado | -classe | Exiba as informações relevantes do ClassLoader: o número de classes carregadas e descarregadas, o espaço total, o tempo consumido pelo carregamento de classes, etc. |
Relacionado à coleta de lixo | -gc | Exibe informações de heap relacionadas ao GC. Incluindo informações como a capacidade da área do Éden, as duas áreas de Sobrevivente, a geração antiga, a geração permanente, etc., o espaço usado e o tempo total do GC. |
-gcapacidade- | O conteúdo de exibição é basicamente o mesmo que -gc, mas a saída se concentra principalmente no espaço máximo e mínimo usado por cada área do heap Java | |
-gcutil | A exibição é basicamente a mesma de -gc, mas a saída se concentra no espaço usado como uma porcentagem do espaço total | |
-gcausa | Igual a -gcutil, mas também gera a causa do último GC ou que está ocorrendo no momento | |
-gcnew | Exibir o status do GC de nova geração | |
-gcnewcapacity | O conteúdo de exibição é basicamente o mesmo que -gcnew, e a saída se concentra principalmente no espaço máximo e mínimo usado | |
-gfrio | Exibir status de GC de velhice | |
-gcoldcapacity | O conteúdo de exibição é basicamente o mesmo que -gcold, e a saída se concentra principalmente no espaço máximo e mínimo usado | |
-gcpermcapacity | Exibe o espaço máximo e mínimo usado pela geração permanente | |
Relacionado ao JIT | -compilador | Exibe informações como métodos compilados pelo compilador JIT e demorados |
-compilação de impressão | Métodos de saída que foram compilados por JIT |
uso jstat
1) Informações estatísticas de carregamento de classe
[root@bogon ~]# jps -l
781 sun.tools.jps.Jps
25887 org.apache.catalina.startup.Bootstrap
[root@bogon ~]# jstat -class 25887
Loaded Bytes Unloaded Bytes Time
3377 6492.3 37 53.6 30.34
contente | ilustrar |
---|---|
Carregado | O número de classes carregadas |
Bytes | O tamanho do espaço ocupado pela classe carregada |
Descarregado | Número de classes não carregadas |
Bytes | Tamanho da área ocupada da classe descarregada |
Tempo | O carregamento da classe leva tempo |
Imprima 5 vezes em intervalo de 1s
tempo de execução do programa de saída
jstat -class -t 25887 1000 5
Imprima o cabeçalho a cada 3 vezes
jstat -class -h 3 -t 25887 1000
2) Visualize estatísticas de compilação JIT
[root@bogon ~]# jps -l
8264 sun.tools.jps.Jps
7706 ParamTest.jar
25887 org.apache.catalina.startup.Bootstrap
[root@bogon ~]# jstat -compiler 7706
Compiled Failed Invalid Time FailedType FailedMethod
10 0 0 0.00 0
contente | ilustrar |
---|---|
Compilado | Número de classes compiladas pelo JIT |
Fracassado | Número de falhas de compilação JIT |
Inválido | Quantidade indisponível |
Tempo | Tempo |
FailedType | tipo de falha |
FailedMethod | método de falha |
jstat -printcompilation 7706
3) Estatísticas de coleta de lixo
Uma breve introdução às estatísticas de lixo
[root@bogon ~]# jstat -gc 25887
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
2880.0 2880.0 0.0 548.0 23552.0 8410.8 58488.0 41320.5 21632.0 20846.0 2432.0 2221.7 215 1.416 3 0.247 1.663
contente | ilustrar |
---|---|
S0C | Tamanho da primeira área de Sobrevivente (KB) |
S1C | Tamanho da segunda área de Sobrevivente (KB) |
S0U | O tamanho usado da primeira área de Sobrevivente (KB) |
S1U | O tamanho usado da segunda área de Sobrevivente (KB) |
CE | Tamanho da área do Éden (KB) |
EU | Use o tamanho da área do Éden (KB) |
CO | Tamanho da área antiga (KB) |
ONDE | O tamanho usado da área antiga (KB) |
MC | Tamanho da área do método (KB) |
UM | Use o tamanho da área do método (KB) |
CCSC | Tamanho do espaço de classe compactado (KB) |
CCSU | Tamanho de uso do espaço de classe compactado (KB) |
YGC | Coleta de lixo da nova geração |
YGCT | A coleta de lixo da geração jovem leva tempo |
FGC | Número de coletas de lixo para idosos |
FGCT | A coleta de lixo da velhice leva tempo |
GCT | Tempo total de coleta de lixo |
oracle官方文档:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gc-ergonomics.html
tamanho de pilha padrão
Quando o tamanho da memória heap não é especificado, a memória heap padrão é 1/64 da memória física e a memória heap máxima é 1/4 ou 1 G da memória física da máquina.
Nota sobre o metaespaço: o metaespaço se expandirá automaticamente e não é limitado por padrão.
[root@bogon ~]# jstat -gc 6619
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1024.0 1024.0 0.0 0.0 8192.0 672.0 20480.0 0.0 4480.0 774.5 384.0 75.9 0 0.000 0 0.000 0.000
[root@bogon ~]# jinfo -flag InitialHeapSize 6619
-XX:InitialHeapSize=31457280
A porcentagem mostra informações de uso do GC
Como julgar possível OOM?
Podemos comparar o tempo de inicialização do processo Java e o tempo total de GC (coluna GCT), ou o tempo entre duas medições e o delta do tempo total de GC, para obter o tempo de GC como proporção do tempo de execução.
Se a proporção exceder 20%, significa que a pressão do heap atual é alta;
se a proporção exceder 90%, significa que quase não há espaço livre no heap e uma exceção OOM pode ser lançada a qualquer momento.
Como julgar possíveis vazamentos de memória?
Etapa 1: em um programa Java de longa execução, podemos executar o comando jstat para obter várias linhas de dados de desempenho continuamente e obter o valor mínimo da coluna OU (ou seja, a memória antiga ocupada) nessas linhas de dados.
Etapa 2: Em seguida, repetimos a operação acima em intervalos longos para obter vários conjuntos de valores mínimos de OU. Se esses valores mostrarem uma tendência ascendente, significa que o uso de memória da idade avançada do programa Java está aumentando, o que significa que o número de objetos que não podem ser recuperados está aumentando, portanto, há uma grande possibilidade de uma memória vazar.