Tomcat

Disponible para descarga Apache Tomcat 8.0.21

Logo de Apache Tomcat

Logo de Apache Tomcat

Tenemos nueva versión de Tomcat 8. A pesar de que para estas alturas ya no esperaba cambios importantes, la gente de la fundación Apache me han sorprendido. Tomcat 8.0.21 trae cambios que te van a hacer la vida un poco mas fácil:

  • Tomcat detectara cuando un war ha sido modificado mientras estaba parado. Hay ocasiones en que olvidar borrar la carpeta de despliegue supone tiempo perdido: tu has actualizado el war, pero los cambios no se reflejan. Es una tontería, pero ocurre. Y precisamente por eso puede ser lo último que mires.
  • Aumentado el soporte a Java 8 JSSE para proveer Forward Secrecy. Lógicamente, requiere del JDK 8. Si alguna vez has tenido curiosidad por saber como se decide el añadir unas features y otras no, tienes un buen ejemplo con esta.
  • Muchas mejoras y nuevas funcionalidades en los conectores AJP. Si usas proxys inversos, estas de enhorabuena.

Puedes ver la lista completa de cambios desde su lanzamiento aquí http://tomcat.apache.org/tomcat-8.0-doc/changelog.html y descargarlo desde aquí http://tomcat.apache.org/download-80.cgi.

Disponibles Apache Tomcat 8.0.20 y 7.0.59

Logo de Apache Tomcat

Logo de Apache Tomcat

Tenemos nuevas versiones del servidor del gato. Tomcat 8 trae principalmente estos cambios:

  • Corregido un problema en la nueva implementación de los resources cuando se usan jars firmados.
  • Corregido un bug cuando se utilizan Servlet 3.0 asíncronos en determinadas condiciones. El efecto secundario es un montón de excepciones en el log. Esto puede parecer una tontería, pero si se te llena la partición con el log puedes tener un problema serio.
  • Mejorado el bean factory usado para los recursos JNDI.

Para Tomat 8 tienes lista completa de cambios desde su lanzamiento aquí http://tomcat.apache.org/tomcat-8.0-doc/changelog.html y puedes descargarlo desde aquí http://tomcat.apache.org/download-80.cgi.

Tomat 7 trae varios bug fixes y ahora el el generador de IDs de sesiones es extensible. La lista completa de cambios puedes verla en http://tomcat.apache.org/tomcat-7.0-doc/changelog.html. Para descargar la nueva versión: http://tomcat.apache.org/download-70.cgi

Disponible para descarga Apache Tomcat 8.0.18

Logo de Apache Tomcat

Logo de Apache Tomcat

Desde el martes esta disponible una nueva versión de Tomcat8. Lo curioso es que 5 días antes se había liberado la versión 8.0.17 y ni siquiera me había dado tiempo a publicarlo. Parecer ser que entre la versión 15, la 17 y la 18 se han realizado cambios con errores que ha producido regresiones que a su vez han causado errores. Cosas que pasan. En cualquier caso, y al margen de todo esto, actualizar a la versión 18 tiene las siguientes mejoras desde la 15:

  • Corregidos errores en la implementación de los websockets
  • Las válvulas RemoteAddrValve and RemoteHostValve ahora puede utilizar  también el puerto y como opción pueden solicitar autentificación en lugar de denegación de acceso.
  • Mejoras en ReplicatedMap de Tribes.

Puedes ver la lista completa de cambios desde su lanzamiento aquí http://tomcat.apache.org/tomcat-8.0-doc/changelog.html y descargarlo desde aquí http://tomcat.apache.org/download-80.cgi.

Instalación de WordPress en un servidor Tomcat

¿Por que?

¿Y por que querría alguien instalar una aplicación php como puede ser WordPress en un servidor java? Buena pregunta. Como en cualquier disciplina, en general existe una colección de buenas practicas a la hora de instalar y administrar servidores de aplicaciones. Conocerlas es fundamental. Pero en ocasiones, por motivos que en condiciones normales ni se te ocurrirían, es necesario violar alguna de estas buenas practicas. ¿Y entonces para que queremos las buenas practicas si luego nos las saltamos? Porque así sabrás lo que estas haciendo. Sabrás que lo que haces conlleva riesgos y que lo haces por una buena razón.

¿Como se hace?

Partiremos de un Tomcat7 recién instalado y funcionando. Para una demo, basta con descomprimirlo y definir el JAVA_HOME en el fichero /bin/catalina.sh, asi que no hace falta que te compliques mas. Seguro que no hace falta que te lo diga, pero la pagina de descargas es http://tomcat.apache.org/download-70.cgi. Necesitaremos también la librería que nos permite conectar a nuestro Tomcat con MySQL. Para ello utilizaremos el conector apropiado, que encontraremos en
http://dev.mysql.com/downloads/connector/j/5.0.html. Descargaremos el zip o el tgz (requiere registro) y copiaremos la librería, que se llamara mysql-connector-java-5.1.33-bin.jar o similar, en la carpeta lib/ de nuestra instalación. También crearemos en nuestro MySQL una base de datos y un usuario de conexión para el WordPress.

Ahora hagamos posible la ejecución de código php en nuestro servidor java. Hay varias maneras, pero la mas sencilla que he encontrado es utilizar PHP/Java Bridge. Iremos a la pagina del proyecto en sourceforge y descargaremos el fichero JavaBridgeTemplate621.war en la carpeta temporal de nuestra maquina de pruebas. Para que funcione, la maquina tendrá que tener instalado php5-cgi y todas sus dependencias. Por último, realizaremos la instalación de PHP/Java Bridge y de WordPress. Si estamos situados en el directorio principal del Tomcat, ejecutaremos los siguientes comandos:

cd webapps/
mkdir wordpress
cd wordpress
unzip /tmp/JavaBridgeTemplate621.war
rm -rf index.php test.php
wget https://wordpress.org/latest.tar.gz
tar xvzf latest.tar.gz && rm -rf latest.tar.gz

Y ya esta. Ahora solo tendremos que arrancar Tomcat ejecutando el script startup.sh. Para proceder a instalar el WordPress abriremos en el navegador la url que corresponda. Como yo tengo el servidor instalado en una maquina virtual con Virtualbox la ruta es http://192.168.56.101/wordpress/, pero seguramente sera distinta en tu caso. Siguiendo el asistente de instalación, donde se nos pedirán los datos de conexión a la base de datos que creamos antes, podremos ver nuestro blog de prueba funcionando casi al instante.

¿Como se comporta?

Para estudiar el rendimiento de esta solución, utilicé uno de los temas que hay para WordPress que estoy valorando para emplear en este blog. El tema en cuestión tiene la opción de descargar contenido de prueba para que puedas ver lo que ofrece si lo configuras bien y utilizas texto e imágenes cuidadas. Una vez cargado ese contenido inicial, creé una prueba de carga con jmeter tal y como explique hace ya tiempo en este post. Y los resultado fueron sorprendentes.

En todas las pruebas se utilizan 25 hilos, con un periodo de subida de 50 segundos y dos iteraciones. Realmente no era necesario mas para este caso. Y en cada prueba lo que fui modificando fue en numero de cpus de la maquina virtual.

Maquina virtual monoprocesador

Si utilizamos una maquina de un solo procesador, los resultados en cuanto a rendimiento son extremadamente similares entre servir el blog con Tomcat o con Apache. Algo estupendo. Con Tomcat se sirven 9,6 objetos por segundo y con Apache 9,5. En las siguientes capturas puedes ver el informe agregado en cada caso. No hace falta que te dejes los ojos buscando el resultado, al final del post hay una tabla resumen.

Rendimiento de Apache sirviendo WordPress (1 core)

Rendimiento de Apache sirviendo WordPress (1 core)

Rendimiento de Tomcat sirviendo WordPress (1 core)

Rendimiento de Tomcat sirviendo WordPress (1 core)

Mientras se ejecutaba la prueba, tuve abierto un top en la maquina. Podéis verlos aquí:

Comportamiento del sistema con Apache sirviendo WordPress (1 core)

Comportamiento del sistema con Apache sirviendo WordPress (1 core)

Comportamiento del sistema con Tomcat sirviendo WordPress (1 core)

Comportamiento del sistema con Tomcat sirviendo WordPress (1 core)

Maquina virtual multiprocesador

Aquí es donde llegan las malas noticias: usando 2 o 4 procesadores el rendimiento de Apache aumenta linealmente con el numero de cores pero el de Tomcat disminuye casi en la misma proporción. Puedes verlo en la siguiente tabla:

 

1 core 2 cores 4 cores
Tomcat 9,6 8,4 2,5
Apache 9,5 16,8 30,6

Efectivamente, la caída de rendimiento es brutal. En las siguientes capturas se puede ver la posible causa:

Comportamiento del sistema con Apache sirviendo WordPress (2 core)

Comportamiento del sistema con Apache sirviendo WordPress (2 core)

Comportamiento del sistema con Tomcat sirviendo WordPress (2 core)

Comportamiento del sistema con Tomcat sirviendo WordPress (2 core)

Apache abre procesos conforme los va necesitado pero cuando es Tomcat quien ejecuta el php solo es capaz de abrir 5 procesos de php5-cgi. Esto puede deberse a algún tipo de limitación establecida en tiempo de compilación.

Conclusiones

Si necesitas ejecutar una aplicación php sobre Tomcat (o Jetty) puedes hacerlo. Si ademas necesitas alto rendimiento, tendrás que continuar donde yo lo he dejado, investigando si aumentando el numero de procesos que se pueden abrir de php5-cgi mejora el comportamiento.

Disponible para descarga Apache Tomcat 6.0.43

Como vimos hace unos días con Tomcat7 y Tomcat8, también se ha modificado la versión 6 para solucionar la vulnerabilidad POODLE.

La lista completa de cambios puedes verla en http://tomcat.apache.org/tomcat-6.0-doc/changelog.html. Para descargar la nueva versión: http://tomcat.apache.org/download-60.cgi.

Ir arriba