Vamos a centrarnos en comentar JConsole y JVisualVM.
Lo mas correcto a la hora de utilizar cualquiera de las dos herramientas es conectar con el servidor mediante JMX (Java Management Extensions) que es una especificación que define un mecanismo para ajustar aplicaciones y servicios en caliente. La monitorización mediante JMX es la menos intrusiva, se estima que ronda el 5% de sobrecarga.
Para monitorizar nuestro servidor mediante JMX tendremos que realizar los siguientes ajustes:
1) Paramos nuestro servidor Tomcat:
$ /{tomcat-folder}/bin/shutdown.sh
2) Creamos (si no existe ya) el fichero /{tomcat-folder}/bin/setenv.sh con el siguiente contenido:
export JAVA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"
3) Rearrancamos nuestro servidor Tomcat:
$ /{tomcat-folder}/bin/shutdown.sh
A la hora de monitorizar el servidor tomcat desde nuestro PC podremos levantar JConsole o JVisualVM, ambas herramientas están disponibles en el JDK:
1) Levantamos cualquiera de las herramientas
$ /{jdk-folder}/bin/jconsole
$ /{jdk-folder}/bin/jvisualvm
2) Definimos la conexión remota JMX, para lo que necesitaremos conocer la IP y el puerto del servidor, sería siempre algo así "127.0.0.1:9999".
- JConsole. Connection / New Connection / Remote Process / <hostname>:<port>
- JVisualVM. File /Add JMX Connection / <hostname>:<port>
Con esto ya deberíamos poder monitorizar nuestra JVM en producción o en pruebas de carga (lanzadas por ejemplo con JMeter) en preexplotación y observando la evolución de:
Memoria Heap
Memoria PermGen
Threads
Garbage Collector
CPU utilizada
Clases cargadas en memoria
MBeans
etc
Aunque para una monitorización básica de la JVM ambas herramientas son válidas, JVisualVM es mucho mas potente, dado que ofrece muchas de las características de herramientas comerciales de "profiling" (que se puede traducir como "perfilado", "afinamiento" o "puesta a punto") como JProfiler y YourKitdado. Con JVisualVM podremos "afinar" el rendimiento de nuestra aplicación:
- Monitorizando el tiempo de CPU consumido por nuestras clases/paquetes durante una tanda de pruebas, detectando cuellos de botella o problemas de programación que impliquen tiempos de respuesta muy elevados.
- Monitorizando la Memoria utilizada por nuestra aplicación, detectando que objetos aparecen con un frecuencia inesperada (posibles memory leaks), cual es el consumo de memoria de dichos objetos (posibles pool), etc.
Nota. JVisualVM se puede ampliar con muchos plugins, se puede integrar con Eclipse, es gratuíta, ...
No hay comentarios:
Publicar un comentario