viernes, mayo 04, 2018

Optimizando Tomcat7 en Linux CENTOS

Resultado de imagen para configurando tomcat centos
Dispongo en la actualidad de un servidor con las siguientes caracteristicas:
1.- 2GB de Ram
2.- 100GB de disco.

Conocer el tamaño de memoria del servidor:
free -m cat /proc/meminfo
 
Conocer version del sistema operativo: 
rpm --query centos-release
cat /etc/centos-release
cat /etc/os-release
cat /etc/system-release 
cat /etc/redhat-release
 
He procedido a instalar Tomcat7 con OpenJdk7.

Al inicio se presentaba una serie de dificultades, el rendimiento no fue muy bueno, en virtud de ello se procedió a realizar los siguientes cambios.

  • Parámetros de la JVM

     

    Procederemos ahora a configurar los parámetros de la JVM. Los parámetros sobre los que trabajaremos serán:
  • -Djava.awt.headless=true
  • -Xms256m
  • -Xmx768m
  • -XX:MaxPermSize=256m
  • -DGEOEXPLORER_DATA

-Djava.awt.headless=true

Esta opción valor true le indica a Java que trabajaremos sin interfaz gráfica.

-Xms256m -Xmx768m

Con estos parámetros definiremos el tamaño del heap o memoria que Java. Los objetos de Java residen en una zona llamada heap. El heap se crea cuando la JVM se inicia y puede aumentar o disminuir de tamaño mientras se ejecuta la aplicación. Cuando la pila se llena, se recoge la basura, se inicia el proceso del Garbage Collector. Durante la recogida de basura, los objetos que ya no se utilizan se borran, con lo que se crea espacio para los nuevos objetos.
Algunas recomendación será que en producción es interesante que Xmx (Máximo tamaño del heap) y Xms (Mínimo tamaño del heap) sean idénticos.

-XX:MaxPermSize=256m

La JVM tiene un espacio permanente para alojar objetos, el Permanent Generation. Será el espacio dinde se alojan las clases y los métodos.
Se ha deprecado esta opción en Java 8 cambiándola por el Metaspace del que podremos definir el > tamaño máximo que podrá ocupar de la memoria del servidor.


  • Aplicar parámetros a la JVM.

     Antes de aplicar los parámetros, realizaremos la misma prueba anterior con JMeter para comprobar el rendimiento sin estos. Para ver las opciones con las que está trabajando tomcat podremos ejecutar:

     ps -ef | grep tomcat7
 
Donde podremos observar que tiene una memoria máxima por defecto 
 
 
Para aplicar los parámetros anteriores, podremos utilizar varios métodos. 
Uno de ellos será definir un archivo setenv.sh en la carpeta $TOMCAT_HOME/bin con la siguiente estructura:
 

#!/bin/bash

export JAVA_OPTS="-Djava.awt.headless=true -Xms1024m -Xmx1024m"
 
 service tomcat7 restart
 
Comprobamos las modificaciones. 
 ps -ef | grep tomcat7
 
 
 

Modificar Numero de Conexiones.

  <Connector 
port="8080
protocol="org.apache.coyote.http11.Http11NioProtocol
connectionTimeout="600000
redirectPort="8443
enableLookups="false
maxThreads="1500
compressableMimeType="text/html,text/xml,text/plain,text/css,application/x-javascript,text/vnd.wap.wml,text/vnd.wap.wmlscript,application/xhtml+xml,application/xml-dtd,application/xslt+xml
compression="on"/>

Reiniciar el tomcat
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" connectionTimeout="600000" redirectPort="8443" enableLookups="false" maxThreads="1500" compressableMimeType="text/html,text/xml,text/plain,text/css,application/x-javascript,text/vnd.wap.wml,text/vnd.wap.wmlscript,application/xhtml+xml,application/xml-dtd,application/xslt+xml" compression="on"/>

Fuente: https://www.enmimaquinafunciona.com/pregunta/2454/apache-tomcat-ahoga-despues-de-300-conexiones
 
Referencias:
Optimizar el Tomcat
Optimizar Tomcat