Monitorización de procesos Java con visualgc (Visual Garbage Collection Monitoring Tool)

Estos “gadgets informáticos” que te permiten monitorizar procesos Java no están nada mal. Uno de mis preferidos es visualgc. Básicamente porque no necesita apenas configuración y no hay que tocar nada crítico ni a nivel de sistema ni de servidor de aplicaciones.

El programita en cuestión está disponible para todos los públicos gratuitamente en la web de Oracle. Utilizaremos la versión 3.0. Una vez lo tengamos, procedemos a descomprimir el .zip correspondiente:

unzip jvmstat-3_0.zip

Después entramos en el directorio /bin de la utilidad:

cd jvmstat/bin

Para utilizarla, tendremos que definir la variable de entorno JVMSTAT_JAVA_HOME que tiene que apuntar a la JDK que tengas instalada. Así que dicho sea de paso, si sólo tienes una JRE no te bastará, tendrás que instalar una JDK. En mi caso, utilizo Debian y tengo instalada OpenJDK, que sirve para el mismo menester, por lo que defino y exporto la variable de entorno de la siguiente manera:

export JVMSTAT_JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

Después busco el ID del proceso Java a monitorizar. Podrás hacerlo fácilmente con la utilidad ps en Linux, por ejemplo:

ps -ef | grep java

En otras plataformas como Windows, donde también podéis utilizar esta herramienta, podréis saber el PID abriendo un cmd con el comando tasklist. Pues bien, volvamos a nuestro caso que es Linux: suponiendo que el proceso Java tiene el PID 11064, lo monitorizaría de la siguiente manera:

./visualgc 11064

Y tendré dos ventanitas chulas con información muy útil de lo que se está cociendo en la Máquina Virtual de Java (JVM, Java Virtual Machine) correspondiente a ese proceso Java.

visualgc_java

Entre otros, podemos ver:

  • Distintos tipos de memoria de la JVM: permanente y dinámica (heap).
  • Generaciones de memoria dinámica: eden, old, survivors.
  • Funcionamiento del recolector de basura, tanto a nivel de recolecciones parciales como completas.
  • Nº de compilaciones.
  • Estado de la JVM (Alive/Dead)

Muy útil para detectar pérdidas de memoria (memory leaks), ajustar parámetros, optimización y tuning, etc… También ten en cuenta que si el servidor que quieres monitorizar es remoto, puedes exportar las X a tu máquina local para hacer uso de visualgc.

Existen otras herramientas muy útiles especialmente para administradores de servidores de aplicaciones basados en Java como Tomcat, Jboss o Weblogic, que comentaré en un artículo más adelante. No es plan de contarlo todo ahora, que sólo es el primer día de este año ;D