Tengo una aplicación de alto volumen de Java que maneja una carga constante de 50000msgs/seg. Se está sintonizado para un alto rendimiento usando los siguientes ajustes:¿Por qué los tiempos de GC aumentan constantemente en una aplicación Java de alto volumen y larga ejecución?
-Xmx3g -Xms3g -XX: NewSize = 2g -Xss128k -XX: SurvivorRatio = 6 -XX: TargetSurvivorRatio = 90 -XX: + UseParallelGC -XX: ParallelGCThreads = 12 -XX: + UseParallelOldGC -XX: + HeapDumpOnOutOfMemoryError
Estoy descubriendo que los tiempos de los jóvenes GC constantemente aumentan de 50 ms cuando comienza a 200 ms para el final del día, aunque la frecuencia de carreras de GC sigue siendo la misma.
Si pruebo la misma ejecución con el colector ParNewGC, los tiempos de GC aumentan mucho más rápido. ¿Alguien tiene alguna idea sobre este problema?
¿Al día siguiente empeora con el tiempo, es decir, supera los 200 ms o reinicia la aplicación cada día? – JoseK
Supongo, pero ¿no es esto solo un efecto secundario de NewSize que es realmente grande? GC-ing en 2 gigas de objetos parece que llevaría un tiempo. – wds