Archivo de enero, 2015

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.

Oracle publica Java SE 8u31 y Java SE 7u75/76

Logo de Java

Logo de Java

Enmarcados dentro del January 2015 Critial Patch Update, Oracle ha publicado nuevas versiones del JDK. Se trata de las versiones 8u31, CPU 7u75 y PSU 7u76. En anteriores distribuciones vimos en que consistía la diferencia entre CPU y PSU. En la Pagina de Oracle puedes ver la explicación completa.

También es importante que recuerdes que Java SE 7 se esta acercando al final de su ciclo de vida. En Abril esta previsto que se acaben las distribuciones publicas. Lo ideal es, como no, actualizar tus servidores java a la versión 8. Pero como el mundo no es perfecto, si no resulta posible siempre puedes pagar a Oracle por soporte ampliado. Tienes el roadmap aquí.

Volviendo al tema del Critical Patch Update, esta versión corrige 19 problemas de seguridad, de los cuales solo dos afectan a una instalación en modo server y no son muy serios. Pero esto es lo de menos. Lo importante es que por defecto se desactiva uso de SSL3, que como hemos visto anteriormente en otras entradas, es un protocolo obsoleto y bastante vulnerable. Aquí puedes ver el detalle de los problemas de seguridad corregidos.

Como en otras ocasiones, si has entrado en este post buscando esta versión en concreto, pero ya no la ves en la página de descarga, prueba en el archivo de Oracle.

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.

Ir arriba