outofmemoryerror optimizar memoria maquina espacio dinámico aumentar almacenamiento java tomcat garbage-collection jvm

optimizar - java lang outofmemoryerror espacio de almacenamiento dinámico de java



¿Por qué la JVM de estos servidores Tomcat realiza un GC completo por hora? (2)

Sus GCs "regulares" por hora probablemente se deben a este error conocido , " El JreMemoryLeakPreventionListener causa un GC completo cada hora cuando gcDaemonProtection = true ".

Confirme sus versiones de Tomcat y el valor de la propiedad gcDaemonProtection de su JreMemoryLeakPreventionListener (el valor predeterminado es true ).

El parche se incluyó supuestamente en Tomcat v.7.0.28 + y v.6.0.36 +.

Actualice su (s) servidor (es) o elija una solución que no se actualice desde here , resumida como sigue:

  1. suprimir colecciones de basura completas usando JVM arg -XX:+DisableExplicitGC
  2. conservar los GC completos, pero diferir al recopilador CMS utilizando JVM arg -XX:+ExplicitGCInvokesConcurrent
  3. set <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" gcDaemonProtection="false"/>
  4. Deshabilitar el oyente

Crédito a quien crédito merece; Obtuve mi respuesta inicial desde here .

Ejecutamos muchos servidores Tomcat y hemos observado que las recolecciones de basura completas (CG) a menudo se realizan por horas, especialmente cuando el uso de la memoria es relativamente bajo. El tiempo preciso parece ser relativo al momento en que se inició el servidor de aplicaciones; si un servidor se inicia a las 01:13, se realiza un GC completo a las 02:13, y el siguiente GC completo se producirá a las 03:13. No he podido encontrar ninguna documentación para explicar este comportamiento.

Esto es un problema porque un grupo de servidores se inició simultáneamente todos tienden a hacer GC completos al mismo tiempo. Si la demora del GC es lo suficientemente larga como para hacer que un equilibrador de carga marque un servidor como inactivo, toda la aplicación puede desconectarse por un tiempo. Sería mejor si los GC completos pudieran distribuirse a lo largo de un período, por lo que no hay dos servidores haciendo un GC completo al mismo tiempo, pero no puedo encontrar ninguna manera de controlar este comportamiento.

Alguien más ha visto este comportamiento? ¿Hay alguna manera de influir cuando ocurren estos GC completos "regulares"?