Eu configurei o java para despejar informações de coleta de lixo nos logs ( verbose GC ). Não tenho certeza do que significam as entradas de coleta de lixo nos logs. Uma amostra dessas entradas está postada abaixo. Eu pesquisei no Google e não encontrei explicações sólidas.
Tenho alguns palpites razoáveis, mas estou procurando respostas que forneçam definições estritas do que significam os números nas entradas, apoiadas por fontes confiáveis. Um +1 automático para todas as respostas que citam documentação solar. Minhas perguntas são:
- A que PSYoungGen se refere? Presumo que tenha algo a ver com a geração anterior (mais jovem?), Mas o que exatamente?
- Qual é a diferença entre o segundo trio de números e o primeiro?
- Por que um nome (PSYoungGen) é especificado para o primeiro trio de números, mas não para o segundo?
- O que significa cada número (tamanho da memória) no trio. Por exemplo, em 109884K-> 14201K (139904K), é a memória anterior a GC 109884k e então é reduzida para 14201K. Como o terceiro número é relevante? Por que exigiríamos um segundo conjunto de números?
8109.128: [GC [PSYoungGen: 109884K-> 14201K (139904K)] 691015K-> 595332K (1119040K), 0,0454530 s]
8112.111: [GC [PSYoungGen: 126649K-> 15528K (142336K)] 707780K-> 605892K (1121472K), 0,0934560 segs]
8112,802: [GC [PSYoungGen: 130344K-> 3732K (118592K)] 720708K-> 607895K (1097728K), 0,0682690 segundos]
fonte
Respostas:
A maior parte é explicada no Guia de ajuste do GC (que você faria bem em ler de qualquer maneira).
Eu não tenho certeza porque há um PSYoungGen no seu; você mudou o coletor de lixo?
fonte
Um exemplo de um GC completo associado também mostra os coletores usados para as gerações antigas e permanentes:
Finalmente, quebrando uma linha de sua saída de registro de exemplo:
fonte
Eu só queria mencionar que é possível obter o log detalhado do GC com o
parâmetro. Então você vê a saída PSYoungGen ou PSPermGen como na resposta.
Também
-Xloggc:gc.log
parece gerar a mesma saída,-verbose:gc
mas você pode especificar um arquivo de saída no primeiro.Exemplo de uso:
Para visualizar melhor os dados, você pode tentar o gcviewer (uma versão mais recente pode ser encontrada no github ).
Tome cuidado para escrever os parâmetros corretamente, esqueci o "+" e meu JBoss não ligava, sem nenhuma mensagem de erro!
fonte
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<some number of files> -XX:GCLogFileSize=<some size> -XX:+PrintTenuringDistribution