javOSize: el azúcar que le faltaba a tu taza de Java
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:
- Mide: revisa el estado de los threads, consulta usuarios, sesiones, URLs, aplicaciones y sus tiempos de respuesta y consumos de CPU. Accede a los beans JMX, a contadores de rendimiento de tu JVM, al tamaño de las clases, monitoriza el rendimiento de tu JVM y la funcionalidad de cualquier parte del código. Literalmente, no hay nada que no puedas medir con javOSize
- Inspecciona: javOSize te permite crear interceptores a medida para cualquier método para que puedas explorar sus parámetros y los valores devueltos. En cualquier momento puedes ver el código de cualquier clase, en tiempo real y sin tener acceso al código fuente.
- Experimenta: dado que los fallos aparecen cuando menos te lo esperas, estate preparado. Modifica tu aplicación en tiempo real y sin reiniciar para incluir trazas de depuración o parches. Crea puntos de ruptura para un usuario concreto o una sesión específica. Accede a los parámetros de un método o ejecuta cualquier fragmento de código java en tu servidor de aplicaciones. Y perdón por repetirme pero... ¡¡¡no necesitas modificar, reiniciar o desplegar nada en tu servidor de aplicaciones!!!
- Automatiza: javOSize proporciona capacidades de scripting muy flexibles para que puedas automatizar tus tareas de troubleshooting y corrección. Agrupa acciones en recetas y ejecútalas bajo demanda, de manera programada o bajo determinadas condiciones. Purga sesiones HTTP que ocupan más de un determinado tamaño en memoria y no han sido utilizadas en un determinado intervalo de tiempo o envía notificaciones cuando un thread consume demasiado CPU.
- Comparte: las recetas que creas solucionan problemas que otros pueden estar sufriendo. Y viceversa. Utiliza nuestro repositorio donde todo el mundo puede contribuir con sus propias recetas para las tareas más habituales.
Vale pero... ¿Qué me aporta javOSize?
De manera muy resumida, los principales beneficios de utilizar javOSize en tu entorno son:
- Tener una herramienta de troubleshooting apta para entornos de producción con las características y la flexibilidad de una herramienta de desarrollo: javOSize ofrece una línea de comandos tipo Linux que te permite interactuar con cualquier JVM. Imagina poder poner una traza de depuración en un punto donde no la tienes cuando tu aplicación no funciona. Sin tener que esperar a que te envíen el parche. Y lo que es más importante, sin reiniciar tu servidor de aplicaciones.
- Automatizar tareas correctivas: define las tareas que se ejecutarán dentro de tu JVM de manera automática bajo determinadas circunstancias. Imagina borrar una sesión cuando su tamaño es mayor que determinado umbral mientras esperas el parche.
- Interfaz de gestión común para cualquier entorno java. javOSize es independiente del servidor de aplicaciones al que se conecta. Estandariza las tareas de troubleshooting y correctivas. No necesitas aprender a utilizar diferentes consolas de administración para los distintos servidores de aplicaciones de tu entorno. Aprende una herramienta, depura cualquier servidor de aplicaciones. javOSize te permite realizar tareas que de otra manera requerirían un reinicio, y por lo tanto, que el problema desaparezca. ¿Cuántas veces te han pedido el log del recolector de basura pero no estaba configurado? ¿O quisiste revisar la memoria pero no tenías el interfaz JMX habilitado?
¿Y ésto cómo funciona?
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.
javOSize en acción
Vamos a ver de manera resumida algunas de las cosas que podemos hacer con javOSize.
Herramienta para producción con flexibilidad y características de un entorno de desarrollo
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:
Automatización de tareas correctivas
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":
Interfaz de gestión común
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.
Y ya me despido...
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...
Reader Comments (2)
Esto si que es una sorpresa, la verdad no me lo esperaba. Gracias por la introducción ha esta que parece una magnifica herramienta. Me pondré de lleno con ella..
Gracias.
Pues si te parece interesante esto a lo mejor quieres participar en el concurso:
http://www.javahispano.net/portada/2015/7/13/concurso-de-javosize-gana-200-twitteando-con-el-hashtagjavos.html