En ocasiones se hace necesario monitorear las actividades de nuestro servidor para conocer su estado, en mi caso la necesidad surgió cuando este al desplegar la aplicación comenzaba a bajar el rendimiento hasta colapsar. Actividad que en realidad es muy sencilla, ya que java provee una API que nos permite realizarla; la Java Management eXtensions, La tecnología JMX proporciona una forma simple y estándar para gestionar recursos de aplicaciones, dispositivos y/o servicios. Debido a que la tecnología JMX es dinámica, se puede usar para controlar y gestionar los recursos a medida que se crean, se instalan o son implementados. También puede utilizar la tecnología JMX para supervisar y gestionar la Máquina Virtual Java (Java VM).
Nota: En mi caso utilizo Tomcat sobre Windows 7.
Primero descargamos catalina-jmx-remote.jar, de igual manera (para mi la que mejor me pareció) descargamos visualvm que es el software que nos permitirá observar la actividad y estado del servidor.
Copiamos el catalina-jmx-remote.jar en la carpeta de las bibliotecas de nuestro server.
En el archivo de configuración del servidor llamado server.xml, ubicado en $CATALINA_BASE/conf/ (para mi caso C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\) agregamos una linea donde describimos los puertos que utilizaremos para realizar la conexión:
<Listener className=»org.apache.catalina.mbeans.JmxRemoteLifecycleListener» rmiRegistryPortPlatform=»10001″ rmiServerPortPlatform=»10002″/>
Nota: por lo generar esta linea ya aparece incluida en el archivo server.xml como un comentario.
Modificamos los parámetros con los que inicia el servidor para llamar a las opciones de JMX (las cuales pueden ser modificadas a necesidad pero) para mi caso agregué las siguientes lineas a los parámetros con los que se inicia:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=6060 -Dcom.sun.management.jmxremote.authenticate=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.password.file=C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\jmxremote.password -Dcom.sun.management.jmxremote.access.file=C:\Program Files\Apache Software Foundation\Tomcat 6.0\conf\jmxremote.access
Nota: si -Dcom.sun.management.jmxremote.authenticate=false no es necesario describir los archivos de password y access
Hemos descrito dentro de los parámetros de inicio dos archivos: jmxremote.password y jmxremote.access, archivos de texto plano que contienen las contraseñas y los tipos de acceso a JMX respectivamente:
jmxremote.password | jmxremote.access | |
controlRole control monitorRole monitor |
controlRole readwrite monitorRole readonly |
El siguiente paso a seguir es iniciar nuestro servidor. y conectarnos por JMX, en este punto iniciamos el visualvm y agregamos una nueva conexión JMX y listo ya estamos viendo el comportamiento del server.
los parámetros para la conexión serían:
Connection: service:jmx:rmi://localhost:10002/jndi/rmi://localhost:10001/jmxrmi Username: monitorRole Password: monitor
Nota: el archivo de password debe ser configurado para que sea de solo lectura y solo puede ser visto por el usuario que lo creo que a su vez debe ser el mismo usuario con el que inicia el servidor.
Referencias
- http://docs.oracle.com/javase/6/docs/technotes/guides/management/agent.html
- http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html#JMX_Remote_Lifecycle_Listener_-_org.apache.catalina.mbeans.JmxRemoteLifecycleListener
- http://tomcat.apache.org/tomcat-6.0-doc/monitoring.html#Enabling_JMX_Remote
- http://docs.oracle.com/javase/1.5.0/docs/guide/management/security-windows.html
- http://es.wikipedia.org/wiki/Java_Management_Extensions
- http://docs.oracle.com/javase/tutorial/jmx/overview/index.html