javOSize es la nueva herramienta para hacer troubleshooting y automatizar correcciones sobre cualquier aplicación Java. Sin reinicios. Sin despliegues. Sin overhead. Simplemente conecta javOSize a tu JVM y empieza a disfrutar de capacidades que nunca antes habrías imaginado:
De manera muy resumida, los principales beneficios de utilizar javOSize en tu entorno son:
Muy sencillo. Invocas javOSize con el identificador del proceso (PID) al que quieres conectarte y listo. javOSize inyecta un pequeño agente en la JVM y arranca una interfaz de línea de comandos (CLI) similar a una BASH de Linux. Mira que fácil:
Teclea cualquier comando en la consola. Ésta se lo mandará al agente, que lo ejecutará en tu JVM y mandará el resultado de vuelta a la consola. javOSize funciona con los comandos BASH más típicos, de manera que rápidamente te sentirás cómodo utilizándolo. A modo de ejemplo, la imagen anterior muestra la salida de ejecutar "ls" desde el directorio raíz. Como te podrás imaginar, la salida es un listado de los directorios disponibles. En javOSize los llamamos ENTIDADES. Haz "cd" a cualquier entidad para entrar en ella y de nuevo "ls" para ver qué información te ofrece cada una.
Vamos a ver de manera resumida algunas de las cosas que podemos hacer con javOSize.
Supón que tienes usuarios que se quejan porque una determinada transacción es lenta, o directamente, no responde. Nos podemos conectar con javOSize y listar el estado de todos los threads del servidor con el comando "ls" en la entidad "threads". Entre otras métricas, se muestra el consumo de CPU por thread y el tiempo de ejecución. Podemos ver fácilmente que hay un thread con alto consumo de CPU y alto tiempo de ejecución que está ejecutando el método "mypackage.Hello.doGet":
Vamos a ver más detalles del thread con el comando "cat". javOSize muestra la URL que el usuario está invocando, la aplicación a la que pertenece y una stack trace completa del thread, entre otros detalles:
Ahora ya sabemos que cada ves que mis usuarios piden la URL "/sample/hello", se quedan bloqueados en el método "mypackage.hello.doGet".
Es hora de irse a la entidad de "classes" para ver que ocurre con ese método. Utilizando el comando "vi" (sí, el editor de toda la vida) podemos ver el código fuente e identificar un bucle donde estoy actualizando el contador equivocado:
Hemos identificado el problema. ¿Cuál es el siguiente paso? Podrías pensar que lo siguiente es mandar la información a los desarrolladores para que puedan desarrollar un parche. De acuerdo, hazlo. ¿Pero qué pasa mientras tanto? Los usuarios seguirán sin poder acceder a esta URL. javOSize te soluciona este problema pues te permite editar la clase en caliente, sin reiniciar tu servidor de aplicaciones. Simplemente modifica el código en el editor y cuando guardes los cambios javOSize cambiará la clase en memoria por la nueva que has creado. Así de sencillo. Así de rápido. Así de indoloro (he estado muy tentado de poner la palabra painless, pero creo que ya tenemos bastantes anglicismos. ¡¡¡Esto es javaHispano!!!):
La próxima vez que un usuario solicite la URL "/sample/hello", se mostrará el resultado esperado:
javOSize te permite automatizar tareas en tu JVM. Dentro de la entidad "sh" podemos ejecutar cualquier código java utilizando el comando "exec". Vamos a ver un ejemplo. Me interesa conocer cuáles son los objetos que más me ocupan en memoria, pues son la causa de posibles leaks de memoria. Lo puedo hacer muy fácilmente ejecutando el siguiente código:
Pues si ahora me voy a la entidad "sh" y lo ejecuto:
Voilà!!! (esto lo tomo prestado de mis amigos franceses).
Pero lo más importante, además de ejecutar cualquier fragmento de código bajo demanda, puedo crear recetas con un conjunto de acciones que javOSize almacenará en la entidad "repository":
y planificar su ejecución en la entidad "scheduler":
El último concepto clave de javOSize es que proporciona un interfaz de gestión común para cualquier entorno java. No importa qué JVM o servidor de aplicaciones estés utilizando. javOSize estandariza cualquier tarea de troubleshooting, como sacar información de los threads, volcar el contenido de la memoria, purgar sesiones que ocupan demasiado espacio y no se usan o forzar una recolección de basura. Aprende a utilizar una herramienta y depura cualquier entorno.
Por ejemplo, javOSize te permite interactuar con el interface JMX sin necesidad de reconfigurar tu servidor de aplicaciones, abrir puertos ni reiniciar. Podemos ver el listado de los mbeans que un servidor de aplicaciones ofrece simplemente ejecutando el comando "ls" en la entidad "jmx":
Si queremos detalles de alguno de ellos, ejecuta "cat" seguido del nombre del mbean. Vamos a ver por ejemplo el mbean de memoria. javOSize lista los atributos de este mbean y sus valores. Además, muestra las operaciones que se pueden ejecutar sobre él:
Este mbean me permite forzar una recolección de basura, por ejemplo. Podemos ejecutar cualquier operación utilizando el comando "exec" (a estas alturas del artículo ya lo empezabas a sospechar ¿verdad?):
En este caso, la operación que he ejecutado no devuelve nada, pero si lo hiciera, veías el resultado devuelto en la pantalla.
Podría seguir escribiendo largo y tendido sobre los casos de uso de javOSize, pero no quiero aburrir al personal. Si he conseguido despertar un poquito de interés en ti, puedes encontrar más información en www.javosize.com, y sobre todo, una serie de artículos con casos de uso en nuestra sección gettingStarted, tales como crear interceptores a medida (sí,sí, es como hacerte tu propia herramienta APM), encontrar los métodos más lentos de tu aplicación o encontrar las excepciones que lanza, entre otros.
A mí me gusta especialmente el artículo donde describimos cómo encontrar y resolver en segundos los principales problemas de rendimiento en aplicaciones java. En él puedes ver javOSize en acción.
Síguenos en twitter (@javOSize), escríbenos al correo (info@javosize.com), publícanos en linkeding... en definitiva, ¡¡¡ayúdanos a hacer ruido!!!
¡¡¡Ah!!! ¡¡¡Y se me olvidaba la mejor parte!!! javOSize es gratis...