Estoy usando las -XX:+PrintGCApplicationStoppedTime
y -XX:+PrintGCApplicationConcurrentTime
para activar el registro de gc.
¡Pero descubrí que solo después de 4 0 5 impresiones de PrintGCApplicationStoppedTime
mis detalles reales de los registros de gc se imprimen a través del -XX:+PrintGCDetails
!
Por definición, PrintGCApplicationStoppedTime
imprime la PrintGCApplicationStoppedTime
aplicación detenida para cada gc.
Pero no tengo claro por qué se imprime como en el ejemplo que se muestra a continuación.
Es eso porque
PrintGCApplicationStoppedTime
solo se imprime después de cada punto de scope seguro
(o)
el archivo de registro será registrado por diferentes subprocesos de gc. Estoy usando barrido concurrente para GC completo y ParNew para la generación joven
Mi aplicación es una aplicación web.
Patrón de O / P: me pongo así:
Application time: 0.3847031 seconds Total time for which application threads were stopped: 0.3135419 seconds Application time: 0.1520723 seconds Total time for which application threads were stopped: 0.1993920 seconds Application time: 0.1188219 seconds Total time for which application threads were stopped: 0.1993920 seconds Application time: 0.1188219 seconds Total time for which application threads were stopped: 0.1993920 seconds Application time: 0.1188219 seconds Total time for which application threads were stopped: 0.1993920 seconds Application time: 0.1188219 seconds 1.229: [GC 1.229: [ParNew: 256000K->51200K(256000K), 0.1509756 secs] 426536K->334728K(997376K), 0.1510198 secs] [Times: user=0.85 sys=0.07, real=0.15 secs]
Desafortunadamente PrintGCApplicationStoppedTime
es un nombre engañoso para esta opción de JVM.
De hecho, imprime el tiempo pasado dentro de los puntos de seguridad. Las pausas de Safepoint ocurren no solo debido a la recolección de basura, sino por muchas otras razones:
Los puntos de seguridad pueden ocurrir periódicamente incluso sin una operación VM solicitada para desinflar los monitores inactivos, realizar ciertas tareas de limpieza JIT, etc. Ver -XX:GuaranteedSafepointInterval
opción de máquina virtual de -XX:GuaranteedSafepointInterval
(1000 milisegundos por defecto).
Use -XX:+PrintSafepointStatistics -XX:PrintSafepointStatisticsCount=1
para volcar más información sobre safepoints.