Tengo una aplicación que causa la creación de gran cantidad de basura. El primer (y casi uno) criterio es el bajo tiempo de pausa del GC. Intento diferentes parámetros de GC usando la herramienta visualgc (y registros de gc). Los mejores parámetros están debajo.Java CMS GC Behaviors
-XX: + UseConcMarkSweepGC
-Xmx1172M
-Xms600M
-XX: + UseParNewGC
-XX: NewSize = 150M de
Mi solicitud ejecutar en SunOS 10 con Java 1.6.0_21. El hardware es 2 x CPU quad core (el resultado de uname -X es numCPU = 8).
Las preguntas son
Observar comportamientos GC, creando nuevos objetos en el espacio hasta eden eden está lleno. Cuando eden space full GC se ejecuta, borre la basura, si el objeto no está copiado a Old-gen (descarto 'de' & 'a' espacios), Similarmente Old-Gen está lleno, GC se ejecuta con CMS-concurrent phase y clear Old -gen espacio Alguna parte de CMS es Stop-the-world (tiempo de pausa). Este es un bucle.
- ¿Es el escenerio anterior cierto?
- Después de limpiar el espacio GC de la vieja generación, no hay suficiente espacio para expandir el espacio de la vieja generación (los valores XMS y XMS son diferentes)?
- ¿Cuándo se inicia el funcionamiento completo del GC? ¿Cómo lo decidió?
- CMS: la duración de la fase concurrente depende del tamaño del espacio Eden, de hecho mi expectativa es que el espacio Eden no afecte la duración de la fase concurrente CMS. ¿Qué está pasando con GC relacionado con eden space en CMS-concurrent phase?
- ¿Qué otra cosa me sugiere para minimizar el tiempo de pausa? De hecho, más valiosa respuesta para mí :)
Gracias
Después de 20 horas, gc registra aproximadamente 5 veces la ejecución completa de gc, supongo que algunas pistas sobre por qué ejecutar Full GC son "fallas de promoción" y "falla de modo concurrente". Busque en google estos motivos. En breve, incremente el tamaño de la generación anterior para "falla de promoción" y establezca el valor mínimo XX: CMSInitiatingOccupancyFraction para "falla de modo concurrente". Intentaré establecer XX: CMSInitiatingOccupancyFraction como valor pequeño (como 30 o 60) e incrementar Heap. Compartiré el resultado de la prueba. –
fracaso de promoción es generalmente el problema de fragmentación que mencioné que obliga a un gc completo no concurrente. Necesita examinar su umbral de tenencia y clasificarlos adecuadamente. Establecer la ocupación inicial a un valor bajo (el valor predeterminado es 70 iirc) solo significará gcs completos más frecuentes que no hacen mucho y que no son buenos. ¿Tienes incluso mucho que vive por mucho tiempo? Puede encontrar un eden masivo y una pequeña tenencia es una buena opción. – Matt
El valor de ocupación de inicio bajo es más frecuente CMS, pero no hay problema. El mayor problema STW, mientras que 2-3 segundos. Rendimiento o 0.0x segundos STW no es problema para mi caso. He intentado con un gran tamaño de eden pero la duración de STW aumenta :(¿Cómo establecer el número de subprocesos en la fase concurrente? –