Esta es el arreglo más completa que encomtrarás dar, pero mírala detenidamente y analiza si se adapta a tu proyecto.
Solución:
Aquí hay varias cosas que puedes considerar:
-
Tamaño inicial del metaespacio: ¿Ve un impacto negativo y medible al iniciar su aplicación porque la JVM tiene que cambiar el tamaño del metaespacio? Entonces probablemente debería establecer el tamaño mínimo. Aún así, intentaría evitar esto porque sería una configuración que se olvidará fácilmente cuando la aplicación crezca.
-XX:MetaspaceSize=
-
Tamaño máximo del metaespacio: ¿Desea que su aplicación falle cuando el metaespacio crezca a un tamaño específico? ¿O quieres limitar los recursos que toma el servidor en este sentido? Entonces probablemente debería establecer un tamaño máximo para el metaespacio
-XX:MaxMetaspaceSize=
-
Proporción libre de Metaspace: ¿Cargas muchas clases diferentes dinámicamente? Entonces, tal vez podría definir una proporción libre en el metaespacio para que siempre haya suficiente espacio disponible para nuevas clases y no sea necesario cambiar el tamaño en situaciones críticas.
-XX:MinMetaspaceFreeRatio=
y-XX:MaxMetaspaceFreeRatio=
Mi sugerencia sería apegarse a los valores predeterminados, probarlo y reaccionar solo cuando sea necesario.
La introducción de Metaspace fue un intento de solucionar los problemas de falta de memoria (IIRC) de Java en lo que respecta a la recolección de elementos no utilizados mediante el mencionado crecimiento/asignación de memoria dinámica.
En un entorno de producción, lo que voy a decir no es tan viable, pero: Pruébelo. Personalmente, nunca he tenido ningún problema con la configuración dinámica predeterminada, pero supongo que dependerá del tamaño y el estrés de su aplicación. Por ahora, suponga que la configuración predeterminada es adecuada.
No se te olvide dar recomendación a esta noticia si si solucionó tu problema.