Monitorización y profiling de aplicaciones java con VisualVM

1
33246

Monitorización y profiling de aplicaciones java con VisualVM

1. Introducción

Desde Autentia y desde nuestro afán de mejorar contínuamente queremos presentaros una aplicación que, sin ser todavia una versión definitiva, promete bastante y de la cual podemos sacar bastante jugo.

La aplicación en cuestión es VisualVM y consiste es una herramienta que, de forma gráfica, va a permitirnos monitorizar la máquina virtual que estemos utilizando así como los distintos procesos java que estemos ejecutando sobre ella.

¿Qué utilidad puede tener esto?. Varias, entre ellas las siguientes:

  • Saber el uso de recursos tales como memoria o CPU que están consumiendo las aplicaciones que estemos ejecutando en entornos de producción o desarrollando.
  • Identificar, de las aplicaciones que estemos desarrollando, qué partes o móulos de las mismas consumen más recursos y en qué momento éstos se empiezan a consumir.
  • Poder conocer el número de hilos que están en ejecución y el número de hilos que hubo en el pasado.
  • Medir tiempos para intentar descubrir cuellos de botella.

 

Todas estas operaciones pueden ser fácilmente medidas y visualizadas gracias a que la herramienta va generando graficas en tiempo real. Además no es necesario que utilicemos la herramienta en la misma máquina donde esté la JVM que queramos monitorizar, ya que podemos monitorizar otras JVM instaladas en otras máquinas.

Pero, ¿se pueden realizar todas estas operaciones con cualquier máquina virtual? . La respuesta rápida es que sí, mientras que la larga es que desgraciadamente no, ya que dependiendo de la versión de la JVM que estemos monitorizando y de si ésta es local o remota podremos acceder a un tipo de información u otro. La siguiente tabla muestra las características a las que podremos acceder en función a estas variables:

 

Característica JDK 1.4.2 [ local / remoto ] JDK 5.0 [ local / remoto ] JDK 6.0 [ local ] JDK 6.0 [ remoto ]
Resumen ok ok ok ok
Propiedades del sistema     ok  
Monitor   ok ok ok
Profiler     ok  
Hilos     ok  
Volcado de pila     ok  
Volcado de pila en OOME     ok  
Visualizador de MBeans   ok ok ok

 

Como podreis observar podremos obtener el máximo jugo a esta aplicación si estamos monitorizando una JVM 6 en local. Es por ello que en este tutorial voy a utilizar esta versión de la máquina virtual para mostraros el potencial que tiene esta herramienta.

2. Entorno

 

3. Instalación

El proceso de instalación es muy sencillo. Lo primero que debemos hacer es descargar el software desde la web de VisualVM (https://visualvm.dev.java.net/)

 

 

Una vez descargado hay que descomprimirlo en el directorio desde el cual luego lo vayamos a usar. En la siguiente imagen podemos ver el contenido del zip y cómo tiene los ejecutables para windows y para linux en el directorio \bin

 

 

Lo descomprimimos para instalarlo y tras eso lo ejecutamos. Nos aparecerá el siguente acuerdo de licencia:

 

 

Como podemos ver la licencia del producto es GPLv2. Si estamos de acuerdo con la licencia aceptamos pulsamos ‘I Accept’ o sino pulsamos ‘Exit’ y abandonamos el tutorial :-). Si aceptamos el siguiente paso es dejar a la aplicación que se calibre con la JVM para asi mostrar correctamente la información de profiling (medir tiempos, usos de memoria, etc. para buscar cuellos de botella). Para ello hemos de cerrar todas las aplicaciones que estemos usando que utilicen la JVM.

 

 

4. Monitorización de la propia JVM

Una vez haya terminado la calibración ya estamos preparados para usar la aplicación. El único proceso que deberiamos tener es el de la propia JVM. Hacemos click con el botón derecho sobre ella para empezar a investigar.

 

 

Si pinchamos en ‘Open’ se abrirán dos pestañas, una con información general acerca de la JVM:

 

 

Y otra que monitoriza el uso de memoria que está haciendo la JVM y más información de interés general:

 

 

 

Si hacemos botón derecho sobre la JVM como hicimos antes, pero esta vez seleccionamos ‘head dump‘, podremos ver información a muy bajo nivel, empezando por un resumen:

 

 

Seguido del % de instancias de objetos que están siendo ejecutados desde la máquina virtual (String, Date, HashMap, Float, etc):

 

 

Y si hacemos doble click en cualquiera de los tipos, podremos saber hasta qué valores posee cada variable de ese tipo en ese instante de tiempo:

 

 

5. Monitorización de aplicaciones java

La aplicación permite no sólo monitorizar la JVM en sí, sino tambien las aplicaciones que estén corriendo dentro de la JVM. Voy a seguir el tutorial habiendo lanzado Eclipse Europa (que es la version 3.3 de este IDE). Una vez lanzado, vemos que se nos muestra un nuevo proceso. Si hacemos doble click sobre él se nos mostrará un panel con información general.

 

 

Al igual que con la JVM, tambien podemos ver el uso de CPU, de memoria, etc. de este proceso.

 

 

Tambien podemos buscar posibles cuellos de botella. Para eso hemos de ir al apartado ‘Profiler’ y escoger qué queremos monitorizar (CPU, memoria, etc.). Hay que tener en cuenta, como pone en la leyenda marcada en rojo, que realizar un profile sobre una aplicación que esté en marcha con esta aplicación puede provocar que la misma quede en un estado inconsistente o que incluso se cuelgue.

 

 

Y ya para terminar este tutorial recordaros, como ya hice anteriormente, que tambien es posible monitorizar máquinas virtuales instaladas en otros ordenadores (por ejemplo, servidores en producción). Para poder realizar la monitorización de una JVM remota debereis hacer click derecho sobre el apartado ‘Remote’ y conectaros con la JVM que querais monitorizar.

 

6. Conclusiones

A mi parecer, aunque todavía no sea una versión definitiva, es una herramienta bastante útil que permite encontrar cuellos de botella y puntos donde el uso de CPU o memoria sean más elevados de lo que posiblemente deseasemos. Es una herramienta útil en desarrollo, pero posiblemente lo sea más en entornos de producción donde una aplicación que deba tener una disponibilidad del 100% a menudo sufra pérdidas de rendimiento considerables o incluso caidas, para lo cual la opción de conectar en remoto viene como anillo al dedo. También puede ser útil para los curiosos, ya que muestra mucha información sobre la JVM como por ejemplo el valor que poseen las variables o el número de instancias de determinada clase. En definitiva, es una aplicación a tener en cuenta porque puede ayudarnos a conseguir información muy valiosa para la resolución de problemas que podamos encontrar.

Espero que os sea de utilidad.

 

1 Comentario

  1. Hola. Felicidades por el Manual, está muy bien. \r\n\r\nYo me lo he instaldo porque tengo una aplicación en Producción que, por repetidas excepciones, llena la pilla, y se reinicia el WebLogic, el tema es que necesito alguien a quien \\\»echar la culpa\\\».\r\n\r\nLo he intentado arrancar en mi pc de la ofi, pero no me deja, dice que necesito el JDK, no le vale con el JRE. Tengo el JDK, pero el 1.4 no el 1.6…\r\n\r\nPor último, El plugin de eclipse sirve para hacer monitorización remota?

Dejar respuesta

Please enter your comment!
Please enter your name here