Evitar la promoción fallida en Java CMS GC
Tengo una aplicación Java que usa la recolección de basura CMS que sufre de un GC completo "ParNew (promoción fallida)" varias veces al día (vea un ejemplo a continuación). Entiendo que una falla de promoción ocurre cuando la recolección de basura no puede encontrar suficiente espacio (contiguo) en la generación anterior para promover un objeto de la nueva generación. En este punto, se ve obligado a hacer un costoso GC completo para detener el mundo. Quiero evitar tales eventos.
He leído varios artículos que sugieren posibles soluciones, pero quería aclararlas / consolidarlas aquí:
-Xmx: aumenta el tamaño del almacenamiento dinámico, por ejemplo. de 2G a 4G - solución simple para dar más margen en la generación anterior - parece funcionar razonablemente bien en mi experiencia-XX: NewRatio: aumenta NewRatio, por ejemplo. de 2 a 4, para aumentar la generación anterior / disminuir la nueva generación, dar más espacio a la generación anterior, no parece tener mucho efecto, si lo hay, de mis experimentos hasta ahora-XX: PromotedPadding: aumente la cantidad de relleno proporcionado para evitar fallas de promoción; sin embargo, no puedo encontrar ninguna sugerencia sobre qué valores dar para este parámetro: ¿alguien sabe qué significa el valor, cuál es el valor predeterminado o qué valores ¿tratar?-XX: CMSInitiatingOccupancyFraction -XX: + UseCMSInitiatingOccupancyOnly: haga que el ciclo CMS comience antes para evitar la falta de espacio en la generación anterior. Todavía no he probado esta solución. ¿Qué valores serían razonables? ¿Cuál es el valor predeterminado?No asigne objetos muy grandes en el montón: un objeto muy grande puede ser difícil de promover ya que requerirá una gran cantidad de espacio libre contiguo en la generación anterior; esto no se aplica a mi aplicación, por lo que séEn caso de que sea relevante, aquí están mis opciones actuales de GC y una muestra de registros que preceden a un evento fallido de promoción.
-Xmx4g -XX:+UseConcMarkSweepGC -XX:NewRatio=1
2014-12-19T09:38:34.304+0100: [GC (Allocation Failure) [ParNew: 1887488K->209664K(1887488K), 0.0685828 secs] 3115998K->1551788K(3984640K), 0.0690028 secs] [Times: user=0.50 sys=0.02, real=0.07 secs]
2014-12-19T09:38:35.962+0100: [GC (Allocation Failure) [ParNew: 1887488K->208840K(1887488K), 0.0827565 secs] 3229612K->1687030K(3984640K), 0.0831611 secs] [Times: user=0.39 sys=0.03, real=0.08 secs]
2014-12-19T09:38:39.975+0100: [GC (Allocation Failure) [ParNew: 1886664K->114108K(1887488K), 0.0442130 secs] 3364854K->1592298K(3984640K), 0.0446680 secs] [Times: user=0.31 sys=0.00, real=0.05 secs]
2014-12-19T09:38:44.818+0100: [GC (Allocation Failure) [ParNew: 1791932K->167245K(1887488K), 0.0588917 secs] 3270122K->1645435K(3984640K), 0.0593308 secs] [Times: user=0.57 sys=0.00, real=0.06 secs]
2014-12-19T09:38:49.239+0100: [GC (Allocation Failure) [ParNew (promotion failed): 1845069K->1819715K(1887488K), 0.4417916 secs][CMS: 1499941K->647982K(2097152K), 2.4203021 secs] 3323259K->647982K(3984640K), [Metaspace: 137778K->137778K(1177600K)], 2.8626552 secs] [Times: user=3.46 sys=0.01, real=2.86 secs]