Actualmente estoy enfrentando el problema de que mi aplicación muestra tiempos largos de GC esporádicamente, pero todo esto solo es causado por un procesamiento de referencia débil. Por lo tanto, el tiempo detenido en el hilo siempre está cerca del tiempo de procesamiento de ref débil. Todos los demás ciclos de GC son de 0.0001 segundos a 0.200 segundos.¿Cómo puedo reducir el tiempo de procesamiento de ref débil durante el GC?
Desde el gc.log (reordenada):
10388.186: [GC[YG occupancy: 206547 K (306688 K)]10388.186: [Rescan (parallel) ,
0.1095860 secs]10388.295: [weak refs processing, 2.0799570 secs]
[1 CMS-remark: 2973838K(3853568K)] 3180386K(4160256K), 2.1899230 secs]
[Times: user=2.51 sys=0.00, real=2.18 secs]
Total time for which application threads were stopped: 2.1906890 seconds
Actualmente tengo estos ajustes en su lugar. Intentó una configuración más simple, pero sin cambios.
-Xms4g
-Xmx4g
-XX:NewSize=128m
-XX:+UseConcMarkSweepGC
-XX:+CMSIncrementalMode
-XX:MaxGCPauseMillis=50
-XX:CMSInitiatingOccupancyFraction=50
-XX:ParallelGCThreads=16
-XX:+DisableExplicitGC
Si enciendo NewSize, termino con ciclos de GC largos normales. La máquina tiene 8 núcleos y no quema tanta CPU para la aplicación. Intenté hacer funcionar el GC viejo gen temprano y concurrentemente.
Y sí, no puedo deshacerme del uso de ref débil, porque esto es parte de una biblioteca de terceros.
Genial. Voy a probar esto mañana por la mañana. – ReneS
Tenga en cuenta el formato correcto: -XX: + ParallelRefProcEnabled – ReneS
¡Ayudas! Los tiempos son ahora de 0.2 a 0.5 y parecen ser predecibles. ¡Increíble! – ReneS