Introducción

Hace algún tiempo presente TomEE en un par de entradas. Por si no lo recuerdas, TomEE es un servidor J2EE Web Profile certificado construido encima de Tomcat. Básicamente se trata de un Tomcat con librerías añadidas.

Pues a raíz de esto me preguntaron si todo lo añadido a TomEE le penalizaba a la hora de ejecutar aplicaciones con respecto a Tomcat. ¿La aplicación practica de esto? Por ejemplo, si tengo en una maquina un Tomcat y un TomEE, es importante saber si lo que gano consolidando todas las aplicaciones en el TomEE se pierde por el overhead de este. En general esto es algo que yo no haría: prefiero tener las aplicaciones separadas en varios servidores de aplicaciones en lugar de en uno enorme. Sin embargo, puede haber casos en que resulte útil una consolidación como esta.

Así que me dispuse a comprobarlo. Utilizando una aplicación de prueba, la ejecute en TomEE 1.5.1 y en su Tomcat equivalente 7.0.34. Ambos los configure con el mismo JDK (jdk1.6.0_43) y con la configuración por defecto de memoria. El único cambio ha sido la utilización de JMX para la motorización. Para las pruebas utilice JMeter, un proyecto de la fundación Apache para pruebas de carga.

Resultados

Como en otras ocasiones, los resultados de las pruebas per se e incluso la prueba no tienen valor alguno: lo importante es la comparación entre ambos servidores.

Primero veamos el comportamiento de cada servidor durante la prueba. Primero Tomcat:

Comportamiento de Tomcat durante la prueba

Comportamiento de Tomcat durante la prueba (pulsa para agrandar)

Ahora TomEE:

Comportamiento de TomEE durante la prueba

Comportamiento de TomEE durante la prueba (pulsa para agrandar)

Veamos esto en una tabla comparativa:

Tomcat Tomee
Espacio en disco: 14 M 35 M
Tiempo de arranque: 6069 ms 16408 ms
Heap utilizado 50 – 115 M 50 – 100 M
Non-Heap utilizado 60 M 60 M
CPU utilizado 20 – 60 % 20 – 60 %
Clases cargadas 8079 9683
Hilos lanzados 39 44
Ficheros servidos por segundo 90,58 92,04
Kb servidos por segundo 1641,64 1668,93

Conclusión

Como puede verse, a pesar de que TomEE carga un mayor numero de clases y utiliza mas hilos en su ejecucion, el consumo de CPU y memoria es prácticamente idéntico, así como el comportamiento de la aplicación. Es decir, podemos instalar en TomEE aplicaciones que tradicionalmente irían en un Tomcat sin miedo a la perdida de recursos o rendimiento, con poco de penalización de espacio en disco/backups.