domingo, junio 15, 2008

Testeando performance con eclipse TPTP

Llega el momento en la vida en que nos preguntamos ¿Qué tan malo es el código que escribo?. Bien, la respuesta puede estar dada por muchos factores, el primero de ellos sería simplemente "Eres bastante malo, ni siquiera compila..."
Ya he presentado algunas herramientas que nos ayudaban a tener buenas prácticas a la hora de programar, com por ejemplo PMD. Pero lo que no se mide no se puede mejorar, decía un profesor mío (todavía me falta rendir esa materia, la última). Entonces, para poder medir un poco la performance de nuestras aplicaciones Java estuve probando TPTP (Test and Performance Tools Platform). Es un proyecto de eclipse, bastante estable y con muy buenas pantallas finales.

En cuanto a la instalación, es bastante fácil, lo único que tenemos que hacer es simplemente usar el UpdateManager de eclipse usando el servidor de "Europa update site".
Y para probarlo he usado el último ejemplo que he dado en clase. Básicamente se trata de un problema Productor-Consumidor que crea 50 hilos Productores (clase Alumno) y un sólo consumidor (clase Docente) y que usa además, comunicación por Sockets.
Lo importante en este tipo de problemas, además de sincronización, es que cada hilo, tanto productor como consumidor debe finalizar su ejecución y nunca quedar en estado wait. Entonces utilicé esta herramienta para comprobarlo. A continuación, pueden ver una imagen de los resultados que arrojó:

En la imagen se pueden ver los resultados de cada hilo de ejecución, su estado, su tiempo de actividad y su tiempo de espera (es decir, el tiempo en el que se mantiene como wait) y tiempo de bloqueo. El que más me importa es el "status", en este momento me dice que todos mis hilos (clases Alumno y Docente) están en estado "Stopped", como deberían estar al finalizar el programa. En el siguiente gráfico se puede apreciar el estado incorrecto. Se trata de un trabajo práctico de uno de mis alumnos. Es un problema Productor-Consumidor donde los consumidores (clase modelo.Cliente) quedan al finalizar el programa en estado wait eterno (evidentemente, no le puse 10...).

Esta herramienta permite medir, además del comportamiento de hilos, los tiempos de ejecución de cada clase, con la capacidad de hacer drill-down hasta llegar al nivel de detalle de ejeción de métodos, con tiempos y cantidad de llamadas que realiza.

Una potente herramienta para mejorar la performance de nuestra aplicación y para mejorar nuestro código.

Saludos