Ir al contenido principal

Un bajo consumo de CPU durante pruebas no significa que todo vaya bien.

Un monitoreo pobre durante las pruebas de QA se traduce en problemas y dolores de cabeza en producción, en especial, para los administradores. En las aplicaciones basadas en Java, existen componentes intrínsecos a los servidores de aplicaciones/JVM, como el GC. También existen los componentes de las aplicaciones, como los hilos http o las conexiones abiertas hacia base de datos o ldaps.

Es importante tener la visión completa desde que llega una petición hasta que ésta es retornada. Tengo que decir que debemos ser cuidadosos con los costos de la demasía en el monitoreo, en especial, por el overhead que ésto conlleva. En papel o en una herramienta de software, es posible realizar un mapa con las dependencias a otros servicios, la interacción que tiene; el cual posteriormente podemos anexar en el test plan. Ésto nos ayudará a plasmar y detectar los sitios donde colocaremos nuestros scripts recolectores.

El leitmotiv de este post es describir la importancia de mirar las entrañas de la JVM durante pruebas. A través de los años y de mirar constantemente lo que sucede con el heap, me es posible "olerme" cuando algo va mal.




En la imagen anterior, podemos observar que la creación de objetos es excesiva, misma que saturará al la zona de memoria "madura" del heap (memory leaks). Esto fastidiará al GC, acarreando caídas de la aplicación por un gc overhead limit exceeded. Demás está decir que ésto no dejará a ningún usuario contento.


Como es bien sabido, el JDK de Oracle viene con algunas herramientas de monitoreo, como JConsole y JVisual. Quiero hacer notar en las siguientes imagenes que no es posible detectar el comportamiento anómalo con mirar simplemente las estadísticas del sistema operativo, puesto que el proceso consumirá el 30% de procesador, no obstante, es el GC quien consume los recursos, mientras la aplicación tiene una muerte cerebral.


 

Como se observa en las imagenes anteriores, la gráfica del consumo de CPU muestra que la línea naranja (aplicación/app server) consume los primeros recursos. Posteriormente, la línea azul (GC) es la responsable de el consumo total de CPU del proceso. En las gráficas del heap, podemos ver que por más que el GC se esfuerce, la recolección de objetos es mínima e insuficiente. Ninguna aplicación que se comporte como la descripción anterior debe pasar a producción.

 

Comentarios

Entradas populares de este blog

Ángulo de Corte

El armar un gallo de pulgada es una de las cosas más sujeta a mitos y medias verdades. Este es uno de los muchos temas que los galleros enuncian con una seguridad a prueba de balas.  Hasta el momento no he leído un solo escrito o esquema con detalle científico que tenga conclusiones claras y precisas de lo que sucede en un combate ni la ergonomía que mejor se adapta, todo proviene de un sistema de creencias que, muy en lo personal, me cuesta creer. El ángulo de corte se refiere a la posición de la punta de la navaja con respecto al codo de la pata. Dependiendo del amarrado es que la sitúa en un rango de los 5° a los 9°. De lo que no dudo es que no hay una manera precisa de emitir teorema alguno sobre este rubro. La formula del corte está dada por la sujeción de la navaja, la forma de la navaja, la altura de la botana, la posición de disparo del gallo, así como la calidad y aprendizaje del mismo durante el desarrollo de la pelea. Son muchas las variables, sin emba...

Análisis de conexiones TIME_WAIT

El tema de las conexiones mal utilizadas es un dolor de cabeza para muchos administradores de servidores de aplicaciones. Es común que las aplicaciones que mantenemos en nuestro resguardo sufran degradación, e incluso fallos, por el "simple" hecho de no cerrar las conexiones o tardar demasiado en hacerlo (vía sistema operativo). Como sabemos, una conexión pasa por varios estados, mismos que salen de la intención de este escrito. Las conexiones establecidas (ESTABLISHED) son demasiado costosas cuando abren y cierran, debido a eso, se han creado manejadores de conexiones (pooles) que mantienen abiertas las conexiones para reutilizarlas dependiendo la demanda. Es por eso, que en medida de lo posible, hay que utilizar un manejador de conexiones, ya sea a base de datos o algún broker. Entrando de lleno al tema, las conexiones en estado TIME_WAIT son un problema por el consumo de memoria, ocupando cada una 64k de memoria no paginable, es decir,  todo el tiempo se mantiene...

Los tres enamorados miedosos

Finally we have finished to scan some stories about myths and legends that our ancesters transferred to children. These explain in some cases the world inception like " Creación del mundo " and many others stories that use animals to mirror they reality and your historical context. For download the pdf click in below link. download