xmx xmn permsize maxpermsize increase java java-ee garbage-collection jvm

xmn - xms y xmx java



Optimizando Xms/Xmx/XX: MaxPermSize en JVM (3)

En los raros casos en los que necesito ajustar esos valores, hay un programa llamado JavaVisualVM que está incluido en la jdk (carpeta bin creo) que me parece muy útil. Puede conectarse a su vm en ejecución y analizar todos sus parámetros de tiempo de ejecución.

En la sección de "complementos" también puede encontrar un complemento muy útil para supervisar el gc, donde puede ver qué está sucediendo exactamente allí.

¿Cuáles son los pasos necesarios para obtener un valor optimizado de Xms/Xmx/XX:MaxPermSize ?

Definitivamente puedo establecer un gran valor, pero como usted sabe, el GC lleva tiempo en la memoria grande. ¿Cuál es la recomendación general cuando puedo ahorrar tiempo en las pruebas y encontrar estos valores ?

Por ejemplo, ¿son útiles las siguientes figuras?

Eden Space heap usage - 42MB / 62MB (used / committed) Survivor Space heap usage - 8.5MB / 8.5MB (used / committed) CMS Old Gen heap usage - 100MB / 217MB (used / committed) Non-heap memory pool usage - 36MB


La regla general es que no debe cambiar la configuración de la memoria JVM antes de descubrir un problema que deba resolverse. La JVM hace un muy buen trabajo al ajustar la mayoría de los parámetros en tiempo de ejecución para adaptarse a su aplicación.

Si ha descubierto la necesidad de optimizar los parámetros de memoria, esto depende de lo que necesite optimizar. La configuración que usaría podría variar mucho según el aspecto que necesite optimizar (por ejemplo, las configuraciones para minimizar las pausas son muy diferentes de las configuraciones que maximizan el rendimiento).

Si realmente necesita optimizar, proporcione más información sobre qué aspecto debe optimizar.


Al ajustar GC, debe recopilar las estadísticas de GC durante un período de tiempo más largo y luego actuar sobre eso. Solo una instantánea del tamaño de Generación no es suficiente.

Debieras:

  1. Habilite el registro de GC completo . Ligero pero poderoso.

    • Use -XX:+PrintTenuringDistribution -XX:+UnlockDiagnosticVMOptions -XX:+LogVMOutput -XX:LogFile=jvm.log -XX:+HeapDumpOnOutOfMemoryError -Xloggc:gc.log -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -showversion
  2. Considere medios adicionales para recopilar información sobre su GC . El registro está bien, pero a veces hay herramientas de línea de comandos ligeras disponibles que le darán aún más información. P.ej. jstat for Hotspot que le mostrará la ocupación / capacidad de Eden, Survivor y Old Gen.

  3. Calcular:

    • Conjunto de datos en vivo , Tasa de asignación y Tasa de promoción . Esto le dirá si necesita un Heap más grande o si su ej. Young Gen es demasiado pequeño, o si sus espacios de Sobrevivientes están desbordados, etc.
    • tiempo total de GC , debe ser <5% del tiempo total de funcionamiento. De esta forma, puede juzgar si su estrategia general de GC funciona bien.
    • observar la ocupación Perm Gen

Una vez que tenga esta información, puede comenzar a dimensionar las generaciones y volver a controlar el impacto de los cambios que realice. Las recomendaciones de tamaño habituales para el rendimiento son:

  • Old Gen = 1.5-2x de Live Data Set - su conjunto de datos debe encajar cómodamente en el espacio de OldGen.
  • Perm Gen = 1.5x de la ocupación habitual de PermGen.
  • Young Gen = basado en Tasa de asignación. Vea cuánto asigna en un segundo, luego mire la tasa de promoción, reduzca la tasa de promoción aumentando YoungGen.
  • Espacios supervivientes = monitorizar el umbral de permanencia y la tasa de promoción.

En general, las recomendaciones de tamaño dependen del objetivo de su ajuste:

  • Ajuste de rendimiento - ver arriba,
  • Ajuste de baja latencia : controle las pausas de GC
    • Young GC demasiado tiempo => disminuir joven gen
    • Young GC demasiado frecuente => aumentar la generación joven
  • Ajuste de la huella : ajuste los tamaños de acuerdo con LiveDataSet, la tasa de promoción y la tasa de asignación. Es posible que no necesite agregar el espacio adicional para cada espacio como en el Ajuste del rendimiento

Consulte también la pregunta de ajuste de GC: ¿Existe una guía de libro de cocina para problemas de GC?