Monitoriza tu cache con Jconsole activando Jmx con Ehcache integrado con Spring

0
9728

Monitoriza tu cache con Jconsole activando Jmx con Ehcache integrado con Spring

0. Índice de contenidos.


1. Introducción

Si lo que estás buscando es una forma de monitorizar tu caché, saber cuantos elementos se están cacheando, y poder realizar operaciones sobre esa caché, o simplemente como empezar a utilizar jConsole en tu aplicación este tutorial quizás pueda ayudarte.

El proyecto de ejemplo sobre el que vamos a realizar el tutorial está usando Ehcache para gestionar la caché y Spring para la inyección de dependencias.


2. Entorno

  • Hardware: Portátil MacBook Pro 15′ (2.0 GHz Intel i7, 8GB DDR3 SDRAM, 500GB HDD).
  • AMD Radeon HD 6490M 256 MB
  • Sistema Operativo: Mac OS X Snow Leopard 10.6.7
  • Software: Eclipse Helios


3. Activando Jmx para Ehcache mediante Spring

Hasta ahora si tenemos activada la caché en nuestra aplicación tendremos declarado en algún aplicationContext algo parecido a lo siguiente:

  
      
  
      
      
      
      
      
          
      

El objetivo de este tutorial no es explicar como configurar la caché, para eso tenéis el tutorial Spring cache abstraction de mi compañero Jose Manuel en donde se explica paso a paso la configuración de Ehcache.

Es importante decir que el soporte para Jmx por defecto no está activado, además de estar en un paquete distinto del core de Ehcache, (en concreto net.sf.ehcache.management), tal y como podéis ver en la documentación oficial. Para activarlo debéis incluir los siguientes beans:

  
      
  
      
      
      
      
      
          
      
          
      
          
      
  
      
          
          
          
          
          
          
     

Si os fijáis hemos añadido los 2 últimos beans. El primero de ellos mbeanServer es donde vamos a tener registrados todos los MBeans y es el encargado de gestionar e interactuar con ellos. Al segundo bean, al que podemos llamar gestor, si os fijais le estamos pasando como parámetro en el constructor el mbeanServer ya que el gestor es notificado cuando se crea o se destruye cualquier caché y actualiza el mbeanServer en consecuencia. El encargado de notificar dichas modificaciones en la caché sería el otro bean que se le está pasando por constructor que es ehcache, que si os fijáis, es precisamente el bean que se encarga de gestionar las regiones de caché, y por lo tanto conocerá cuando se crean nuevas o se destruyen viejas. Si queréis saber más sobre los Mbeans os dejo esta página de referencia.

Por último comentar que Jmx es una tecnología cuya arquitectura se divide en tres capas o tres niveles. Del más bajo al más alto tendríamos: Nivel de instrumentación en donde se situarían los MBeans, nivel de agente donde se situaría el servidor de mbeans (mbeanServer) y un tercer y último nivel de gestión donde estaría el último bean que hemos llamado el gestor.

4. Monitorizar la aplicación con jConsole

Para que una aplicación sea monitoriable por jConsole debemos de añadir a la máquina virtual el siguiente parámetro: -Dcom.sun.management.jmxremote=true. En mi caso la aplicación se despliega con Tomcat luego tenemos que editar el servidor para tal fin. Vamos a ver como se hace esto. Lo 1º paramos el servidor si es que lo tenemos arrancado. Hacemos click en la pestaña de Servers de Eclipse y doble click en el Apache Tomcat para poder acceder a la configuración. Nos saldrá una ventana como la siguiente:

Tenemos que hacer click en open launch configuration y luego en la pestaña Arguments añadiremos -Dcom.sun.management.jmxremote=true tal y como muestra la siguiente foto

Ahora solo tenemos que ejecutar jConsole. jConsole es una aplicación gráfica con la que contamos desde la JDK 1.5 para monitorizar nuestras aplicaciones. Está en el directorio donde tenemos instalada la JDK. ¿Cómo? ¿Qué no te acuerdas donde tienes instalada la JDK? a mi también me ha pasado, si escribes whereis java en un terminal el gnomo que vive dentro de tú ordenador lo busca rápidamente y te lo sopla por pantalla. jConsole está dentro del directorio bin, asique una vez en el directorio bin ejecutamos ./jconsole.

Como puedes ver, ahí tenemos nuestra aplicación arrancada, pinchamos en Local process y después en org.apache.catalina.startup.Bootstrap start y le damos a Connect. Deberíamos ver una pantalla como la siguiente

Se nos muestran 4 gráficas que monitorizan en tiempo real la memoria que está usando la aplicación, los hilos actuales, el uso de la CPU y las clases que tiene cargadas, datos que son críticos a la hora de medir el rendimiento de una aplicación. Os recomiendo cacharrear un poco por las ventanas e investigar por vuestra cuenta.


4.1 Gestión de la caché desde jConsole

En este tutorial nos vamos a centrar en la pestaña MBeans. Si lo hemos hecho todo bien al ir a esta pestaña y desplegar net.sf.ehcache deberíamos ver algo parecido a lo siguiente.

Tenemos que tener un MBean por cada región de caché que tengamos. En mi caso tengo definido en ehcache.xml las regiones de caché con los siguientes nombres: au, eps, epe, ept, epx y pds que como veis están todas en la imágen.

Vamos a ver ahora la información que tenemos disponible de cada una de ellas, por ejemplo, vamos a desplegar la opción de eps, dentro de CacheStatistics. Veremos que tenemos 2 opciones: Attibutes y Operations. Si pinchamos en Attibutes podemos ver entre otras cosas el número de elementos que tenemos cacheado de este tipo, que como acabamos de arrancar la aplicación es 0.

A continuación vamos a hacer una petición de elementos eps, para que se almacenen en la caché. Veamos como cambian ahora la información anterior.

Una opción que nos ofrece jConsole y que nos puede resultar muy útil es el limpiado de una región de caché en concreto. Para hacerlo tenemos que pinchar esta vez en la pestaña de Cache y expandir la región de memoria que queramos limpiar, en mi caso eps. A continuación hacemos click en Operations y pinchamos en removeAll como se indica en la imagen

Si lo hemos hecho todo bien deberíamos tener de nuevo 0 elementos cacheados de eps y si estamos debugeando la herramienta al volver a solicitarlos podríamos ver como volvería a entrar en nuestro método @Cacheable (si es que estamos utilizando anotaciones) y volvería a realizar toda la operativa en vez de devolvernos el resultado desde caché sin pasar por el método.

5. Conclusiones

Monitorizar una aplicación puede ser interesante y nos puede ayudar a evitar problemas de rendimiento. Además si monitorizamos la caché podemos acceder a una serie de información valiosísima para ver como se comporta esta en tiempo de ejecución, que elementos son más solicitados, y además tendremos acceso a operaciones como al borrado de regiones de caché lo que me parece bastante interesante.


6. Información sobre el autor

Alberto Barranco Ramón es Ingeniero Técnico en Informática de Gestión y Graduado en Ingeniería del Software por la Universidad Politécnica de Madrid

Mail: abarranco@autentia.com.

Twitter: @barrancoalberto

Autentia Real Business Solutions S.L. – «Soporte a Desarrollo».

DEJA UNA RESPUESTA

Por favor ingrese su comentario!

He leído y acepto la política de privacidad

Por favor ingrese su nombre aquí

Información básica acerca de la protección de datos

  • Responsable:
  • Finalidad:
  • Legitimación:
  • Destinatarios:
  • Derechos:
  • Más información: Puedes ampliar información acerca de la protección de datos en el siguiente enlace:política de privacidad