Instalación JVM y Tunning

Como toda la plataforma está soportada sobre lenguaje Java, es importante como uno de los primeros pasos la instalación de la JVM. Actualmente existen varias JVMs soportadas por la plataforma, alguna de ellas son:

  • Oracle HotSpot.
  • JVM IBM.
  • Open JDK.

Como todas las plataformas de la suite de SysOne están basadas en máquinas virtuales Java es sumamente importante la configuración y optimización de las mismas para cada contenedor de aplicaciones. Por tal motivo dentro de este capítulo se describen aquellos parámetros que se deben tener en cuenta a la hora de la instalación de las mismas en diversos servidores.

Introducción JVM en contenedores

Como sabemos al ser Tomcat un proceso de Java, el servidor de aplicaciones requiere una máquina virtual Java (JVM) para su ejecución y para dar soporte a aplicaciones de Java que se ejecuten en él. Como parte de la configuración de un servidor de aplicaciones, puede ajustar los valores que mejoran el uso del sistema de la JVM.

¿Como hacerlo?

  • Ir a la ruta de instalación del contenedor (ejemplo $CATALINA_HOME)
  • Si el contenedor se encuentra ejecutándose, detenerlo.
  • Abrir en modo de edición, el archivo catalina, en el caso de Windows catalina.bat y en el caso de Linux catalina.sh. Otra buena practica es crear el script setenv.sh. Agregar la siguiente línea:
    #JVM Sample configuration
    JAVA_OPT="-server -Xms64m -Xmx128m -XX:PermSize=64m -XX:MaxPermSize=256m -XX:+UseParNewGC  -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails 
    -Xloggc:/opt/tomcat/logs/log_GC.log"
    

Significado de los parámetros

Parámetro de optimización del rendimiento durante el arranque y en tiempo de ejecución.

-server Para las JVM que compilan inicialmente los métodos de clase con un nivel de optimización bajo, donde las mismas usan un sencillo compilador y un compilador JIT (Just in Time) , se puede utilizar esta opción para que se utilice el compilador que puede optimizarse. Este cambio aumenta de modo significativo el rendimiento del servidor pero éste tardará más tiempo en cargarse cuando se utilice el compilador de optimización.

Parámetros de establecimiento del tamaño de almacenamiento dinámico. -Xms Es el tamaño inicial de la pila de JAVA, en resumen, es el parámetro que controla el tamaño inicial del almacenamiento dinámico Java. Ajustándolo correctamente este parámetro reduce la actividad general del garbage collector mejorando así la productividad y el tiempo de respuesta del servidor. Para algunas aplicaciones, el valor por omisión de esta opción puede ser demasiado bajo, lo que causa un número elevado de recogidas de basura sin importancia.

-Xmx Es el tamaño máximo de la pila de JAVA, en resumen, es el parámetro que controla el tamaño máximo del almacenamiento dinámico Java. Ajustándolo correctamente este parámetro reduce la actividad general del garbage collecto, mejorando así la productividad y el tiempo de respuesta del servidor. Para algunas aplicaciones, el valor por omisión de esta opción puede ser demasiado bajo, lo que causa un número elevado de recogidas de basura sin importancia.

Parámetro de configuración del Garbage Collector. -XX:PermSize Es el tamaño inicial de la memoria permanente, en resumen, es el parámetro que controla el almacenamiento dinámico reservado para la generación permanente contiene todos los datos reflectivos de la JVM. Este tamaño debe aumentarse para optimizar el rendimiento de las aplicaciones que carga y descarga dinámicamente muchas clases.

-XX:MaxPermSize Es el tamaño máximo de la memoria permanente, en resumen, es el parámetro que controla el almacenamiento dinámico reservado para la generación permanente contiene todos los datos reflectivos de la JVM. Este tamaño debe aumentarse para optimizar el rendimiento de las aplicaciones que carga y descarga dinámicamente muchas clases.

-XX:UseParNewGC Este parámetro es un flag que activa el garbage collector en paralelo. Por default, el Garbage Collector de la máquina virtual de Java usa el modo “serial” de recolección, pero esto sólo sirve en máquinas con un solo CPU. Para servidores de aplicaciones con 2 o más cores, tenemos la dos opciones (modos):

  • Modo Paralelo -XX:+UseParallelGC.
  • Modalidad de “pequeños impulsos frecuentes”. Esta opción disminuye un poco el rendimiento del sistema a cambio de no congelar la aplicación cada vez que se llena el GC.

-XX:+UseLargePages -XX:LargePageSizeInBytes=5m El objetivo de la paginación en Java es optimizar los búferes de traducción y búsqueda en memoria (Translation-Lookaside Buffers – TLB). Estos son en pocas palabras, caches que almacenan los últimos mapeos de memoria virtual a física. Modificando los valores correspondientes se incrementa la eficiencia del uso memoria. En la mayoría de los casos no se recomienda pasar de 6 MB de paginación pues puede ser contraproducente. Debido a que una buena parte de las arquitecturas multiprocesador están basadas en el uso de memoria de acuerdo a posiciones relativas a otro procesador o a través de memoria compartida entre procesadores, es posible utilizar una opción de “escopetazo” denominada NUMA. El uso de este parámetro en combinación con -XX:+UseParallelGC puede incrementar significativamente el desempeño.

-XX:+UseParallelGC -XX:+UseNUMA El detalle consiste en que algunas arquitecturas no soportan esta funcionalidad, por lo que el valor aportado por este parámetro debe ser comprobado después de una serie de pruebas de desempeño.

Parámetros de Configuración de Archivos de registro para el análisis y optimización del rendimiento del GC

-verbose:gc Parámetro que prepara la JVM para el registro de información de GC.

-XX:+PrintGCTimeStamps Parámetro que captura la Fecha y Hora exacta en la que el Garbage Collector se ejecuta en relación con el inicio de la aplicación.

-XX:+PrintGCDetails Parámetro que obtiene los detalles acerca de la GC, como el tamaño de la memoria usada o liberada antes y después del GC.

-X:loggc Parámetro que se usa para especificar el nombre del archivo de registro o log del Garbage Collector, el contenido del mismo puede ser la información registrada en lugar de la salida estándar. Al finalizar de configurar los parámetros según la conveniencia para que garantice el rendimiento deseado, se deberá reiniciar el servlet container y recordar que se puede monitorizar el comportamiento de la JVM con solo configurar la monitorización por JMX, utilizando JConsole se podrán ver los resultados del rendimiento de la JVM.

results matching ""

    No results matching ""