He configurado Java para volcar información de recolección de basura en los registros ( GC detallado ). No estoy seguro de qué significan las entradas de recolección de basura en los registros. A continuación se publica una muestra de estas entradas. He buscado en Google y no he encontrado explicaciones sólidas.
Tengo algunas suposiciones razonables, pero estoy buscando respuestas que brinden definiciones estrictas de lo que significan los números en las entradas, respaldadas por fuentes confiables. Un +1 automático a todas las respuestas que citan documentación solar. Mis preguntas son:
- ¿A qué se refiere PSYoungGen? Supongo que tiene algo que ver con la generación anterior (¿más joven?), Pero ¿qué es exactamente?
- ¿Cuál es la diferencia entre el segundo triplete de números y el primero?
- ¿Por qué se especifica un nombre (PSYoungGen) para el primer triplete de números pero no para el segundo?
- ¿Qué significa cada número (tamaño de la memoria) en el triplete? Por ejemplo, en 109884K-> 14201K (139904K), es la memoria antes de GC 109884k y luego se reduce a 14201K. ¿Qué importancia tiene el tercer número? ¿Por qué necesitaríamos un segundo conjunto de números?
8109.128: [GC [PSYoungGen: 109884K-> 14201K (139904K)] 691015K-> 595332K (1119040K), 0.0454530 segundos]
8112.111: [GC [PSYoungGen: 126649K-> 15528K (142336K)] 707780K-> 605892K (1121472K), 0.0934560 s]
8112.802: [GC [PSYoungGen: 130344K-> 3732K (118592K)] 720708K-> 607895K (1097728K), 0.0682690 s]
fuente
Respuestas:
La mayor parte se explica en la Guía de ajuste de GC (que haría bien en leer de todos modos).
No estoy seguro de por qué hay un PSYoungGen en el suyo; ¿Cambiaste el recolector de basura?
fuente
Un ejemplo de un GC completo asociado también muestra los recolectores utilizados para las generaciones antiguas y permanentes:
Finalmente, desglosando una línea de su salida de registro de ejemplo:
fuente
Solo quería mencionar que se puede obtener el registro GC detallado con el
parámetro. Luego verá la salida de PSYoungGen o PSPermGen como en la respuesta.
También
-Xloggc:gc.log
parece generar la misma salida,-verbose:gc
pero puede especificar un archivo de salida en el primero.Uso de ejemplo:
Para visualizar mejor los datos, puede probar gcviewer (se puede encontrar una versión más reciente en github ).
¡Tenga cuidado de escribir los parámetros correctamente, olvidé el "+" y mi JBoss no se iniciaba sin ningún mensaje de error!
fuente
-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=<some number of files> -XX:GCLogFileSize=<some size> -XX:+PrintTenuringDistribution