Este artigo estuda principalmente o entendimento dos registros GC nas máquinas virtuais Java, como segue.
Entender os logs GC é uma habilidade básica em lidar com problemas de memória da máquina virtual Java.
Ao adicionar parâmetros ao tipo de comando java, especifique o tipo GC correspondente, imprima as informações do log gc e envie -as para arquivos e outras políticas.
classe pública referenceCountingGC {public Object instância = null; private estático final int one_MB = 1024 * 1024; byte privado [] bigSize = new byte [2 * One_MB]; public static void mant (string [] args) {testgc ();} public static void testGc () {referenccel objb = novo referenceCountingGC (); obja.instance = objb; objb.instance = obja; obja = null; objb = null; system.gc ();}}javac referenceCountingGC.java
java -xx:+printgcdatestamps -xx:+printgcdetails referenceCountingGC
Lista de parâmetros correspondente
-Xx:+PrintGC Output GC Log
-Xx:+PrintGCDetails Saídas detalhadas de GC
-Xx:+printgctimestamps saídas de registro de data e hora (na forma de tempo de referência)
-Xx:+printgcdatestamps Output Timestamp da GC (na forma de data, como 2013-05-04T21: 53: 59.234+0800)
-Xx:+imprimtheapatgc Imprima as informações da pilha antes e depois do GC
-Xloggc: ../ logs/gc.log Caminho de saída do arquivo de log
Resultados Saída:
2016-03-20T14: 34: 55.118-0800: [GC [Psyounggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 seg] [vezes: Usuário = 0.00 SYS = 0.00, real), 0,0012070 seg.
2016-03-20T14:34:55.119-0800: [Full GC [PSYoungGen: 400K->0K(38912K)] [ParOldGen: 0K->282K(87040K)] 400K->282K(125952K) [PSPermGen: 2622K->2621K(21504K)], 0.0084640 Secs] [Times: Usuário = 0,01 SYS = 0,00, real = 0,01 s.
Pilha
Psyounggen Total 38912k, usado 1013K [0x00000007D55000000, 0x00000007D80000000, 0x000000008000000000)
Eden Space 33792k, 3% utilizado [0x00000007D5500000, 0x00000007D55FD7D0, 0x00000007D760000)
Do espaço 5120k, 0% usado [0x00000007D7600000, 0x00000007D7600000, 0x00000007D7B000000)
Para o espaço 5120k, 0% usado [0x00000007D7B00000, 0x00000007D7B00000, 0x00000007D80000000)
Paroldgen Total 87040K, usado 282K [0x0000000780000000, 0x00000007855000000, 0x00000007D55000000)
Espaço de objeto 87040k, 0% usado [0x0000000780000000, 0x0000000780046bf8, 0x00000007855000000)
PSPERMGEN TOTAL 21504K, usado 2628K [0x0000000077e000000, 0x000000077C3000000, 0x000000078000000)
Espaço de objeto 21504k, 12% utilizado [0x000000077e000000.0x00000077b091380,0xx00000077c3000000)
Psyounggen significa a nova geração, e esse nome é determinado pelo colecionador, que é a limpeza paralela. Paroldgen, permanentemente pspermgen
Você pode ver que existem dois tipos de GC: GC e GC completo. Há uma declaração completa de que o Stop-the World aconteceu com o GC desta vez.
O clã GC (Minor GC): refere -se à ação de coleta de lixo que ocorre no clã. Como a maioria dos objetos Java tem as características da vida e da morte, o GC menor é muito frequente e geralmente a velocidade de reciclagem é muito rápida.
GC mais antigo (GC principal/GC completo): refere -se ao GC que ocorre na velhice. O GC principal aparece, que geralmente é acompanhado por GC menor pelo menos uma vez. A velocidade do GC principal geralmente é mais de 10 vezes mais lenta que o GC menor.
[GC [Psyounggen: 6123K-> 400K (38912K)] 6123K-> 400K (125952K), 0,0012070 seg] [vezes: Usuário = 0,00 SYS = 0,00, real = 0,00 segundos]
O 6123K-> 400K (38912K) dentro do suporte quadrado acima indica que a área de memória usou capacidade antes do GC -> GC após o GC, e o 38912K dentro do suporte redondo atrás é a capacidade total da área de memória.
O 6123K-> 400K (125952K) fora dos suportes quadrados significa que o heap java usou capacidade antes do GC -> o heap java usou a capacidade após o GC e o 125952K dentro dos suportes redondos atrás é a capacidade total do monte Java.
[Tempos: usuário = 0,00 sys = 0,00, real = 0,00 segundos] respectivamente representam o tempo de CPU consumido pelo usuário, o tempo da CPU consumido pelo estado do kernel e o tempo de relógio de parede passou desde o início até o final da operação. A diferença entre o tempo da CPU e a hora do relógio de parede é que o horário do relógio da parede inclui vários tempo de espera de não operação, como aguardar a E/S de disco e aguardar o bloqueio de threads, enquanto o tempo da CPU não inclui esse tempo.
Você pode usar algumas ferramentas offline para analisar logs GC, como o Sun's Gchisto (https://java.net/projects/gchisto) e gcviewer (https://github.com/chewiebug/gcviewer). Estas são todas as ferramentas de código aberto. Os usuários podem baixar diretamente seu código fonte através das ferramentas de controle de versão para análise offline.
O exposto acima é tudo sobre a análise do GC Log of Java Virtual Machine, e espero que seja útil para todos. Amigos interessados podem continuar se referindo a outros tópicos relacionados neste site. Se houver alguma falha, deixe uma mensagem para apontá -la. Obrigado amigos pelo seu apoio para este site!