1. Recursos útiles en el diagnóstico de aplicaciones: Monitoring, profiling Javier Larrosa jlarrosa@artech.com.uy Luciano Silveira lsilveira@artech.com.uy
4. Conceptos Diagnóstico de problemas Identificar – Síntoma Analizar – Causas Acción Diferentes tipos de herramientas
5. Monitoring El acto de observar una aplicación Profiling El acto de recolectar y analizar el rendimiento de una aplicación Conocer la 'salud' de la aplicación
8. Caso de Estudio #1: CPU Síntoma Pantalla Gris o Timeout en el Browser Elevado uso de CPU en el Servidor
9.
10. Caso de Estudio #1: CPU Síntoma Pantalla Gris o Timeout en el Browser Elevado uso de CPU en el Servidor Análisis Revisar gráficas de uso de recursos Threads Stack Trace
11.
12. Caso de Estudio #1: CPU Síntoma Pantalla Gris o Timeout en el Browser Elevado uso de CPU en el Servidor Análisis Revisar gráficas de uso de recursos Threads Stack Traces Acción Modificar programación
13. Caso de Estudio #2: Memoria Síntoma OutOfMemory En el Browser
14.
15. Caso de Estudio #2: Memoria Síntoma OutOfMemory En el Browser Análisis Configuración de memoria Estadísticas de uso de memoria
16.
17. Caso de Estudio #2: Memoria Síntoma OutOfMemory En el Browser Análisis Configuración de memoria Estadísticas de uso de memoria Acción Redimensionar memoria Modificar parámetros del Driver JDBC Revisar la programación
18.
19. Caso de Estudio #3: Recursos GX Management Número de conexiones DataStore Pool de conexiones Performance Estadísticas de uso Datastore Objeto GeneXus Cursores
20. Presentación de Caso WikiAPI (WikiInfoGet, WikiFileInsert, WikiPageABMbyWS, etc…) Autenticación (PIsAuthenticated, PIsAuthorizedToViewThisPage, etc…) Wiki Business Logic Sincronizar Documentación &PageVersion &Page ……... Insert Update Delete Base de Datos
21.
22. Caso de Estudio #3: Recursos GX Acción Habilitar Cache Estadísticas de uso Cantidad de ejecuciones Objetos menos performantes Pool de conexiones
Punto B, Invirtiendo poco, con solo instalar un monitor puedo obtener un beneficio (sin ser un experto).WIIFY: transferir el conocimiento de herramientas que hay y mostrar algunos ejemplos sencillos de problemas de memoria y CPU que se detectan con un monitor.Se presentan los conceptos básicos para utilizar herramientas de Monitoreo, con una proyección de que cosas pueden obtener fácilmente.
Cuando nos entrenamos a una situación a un problema a veces tenemos poca información y actuamos. Tomamos una aspirina, matamos una hormiga con un martillo, para ganar tiempo Para solucionar un problema , hay que encontrar las causas del mismo. Una vez que se da con la causa, la solución es lo mas fácil. Lo difícil es dar con las causas.
Luego de esto podremos aislar el problema ( Error de memoria, memoryleak, loop infinito, performance , etc ) y podremos tomar acciones para resolverlos , como_ Dimensionar el pool de aplicaciones_ Dimensionar server (memoria/CPU)_ Cacheo de datos_ Dimensionar Ancho de banda_ Reescribir la lógicaNo como expertos sino como usuarios de algunos de estos productos vamos a mostrar dos casos. Solo nos centramos en el caso de uso de monitores, para ejemplificar el uso de dicha herramientas.Problemas en ejecución por lo general son difíciles de diagnosticar. Se tiene acceso restringido a la aplicación y por lo general no se pueden realizar modificaciones.Que herramienta o combinación de herramientas utilizo ?
Al enfrentarnos a determinadas situaciones en el desarrollo de aplicaciones, en el troubleshoting tenemos un conjunto de herramientas que nos pueden dar información o mas detalle a fin de identificar el problema.Task manager, Monitor, Profiling de base de datos, Profile Gx, Debug Gx , Eventviewer, Log (JDBC, ADO), FAQ (Gxtest, stress test)Posicionamiento: Nos vamos a enfocar principalmente en monitores y después haremos algún tipo de profiling especifico.Queremos mostrarle como los monitores se pueden aplicar a diferentes tipos de problemas de forma exitosa. Son herramientas importantes que nos brindan información detallada sobre la 'salud' de la aplicación; esta funcionando correctamente ? (no se cayo), los tiempos de respuesta son aceptables ?, etc.Un "profiler" es una herramienta de análisis de rendimiento que mide el comportamiento del programa mientras este está corriendo, particularmente la frecuencia y duración de las llamadas a funciones.
Tengo la aplicación ejecutando y en determinado momento “se muere”; levanto el monitor y analizo las graficas:_memoria ok_ CPU malConsulto la ventana de Threads para tratar de encontrar que clases están corriendo hasta llegar al stack trace del objeto que me interesa.Reingeniería inversa a partir de la línea de código Java al objeto GX y me doy cuenta que tengo un problema de programación en la lógica de mi objeto.Aíslo el tema; es un loop infinito en la programación.Modifico la programación; ejecuto de vuelta.
Tengo la aplicación ejecutando y en determinado momento “se muere”; levanto el monitor y analizo las graficas:_memoria ok_ CPU mal
Consulto la ventana de Threads para tratar de encontrar que clases están corriendo hasta llegar al stack trace del objeto que me interesa.Reingeniería inversa a partir de la línea de código Java al objeto GX y me doy cuenta que tengo un problema de programación en la lógica de mi objeto.
Aíslo el tema; es un loop infinito en la programación.Modifico la programación; ejecuto de vuelta.
Síntoma_ stack trace en Java con info de OutOfMemory.
Ejecuto un proceso y en ciertos casos da un error de Memoria. Lo primero que tengo que hacer una vez identificado el caso es tratar de aislarlo para poder estudiar el caso el detalle. Una vez asilado estudio lo que realiza.
Con el monitor rápidamente se revisan los parámetros de memoria de la virtual Machine y revisa el código GX asociado al error.
Se modifica la parametrización de la memoria y ejecuta nuevamente.Con un usuario funciona pero varias sesiones también da el problema de memoria, el caso no escala.Se investiga en mas detalle el caso, revisando el código GX se está recorriendo una tabla con campos LVC grandes. Se busca en internet y encuentra que el problema ocurre con este tipo de dato y el “Driver mySQL” al recorrerse muchos registros. Por defecto el protocolo mySQL resuelve la lectura de los registros trayendo toda la información a memoria para que sea procesada. En este caso al recorrer muchos registros que contienen campos con LVC de 34 kb se quedaba sin memoria.Action: Los reportes encontrados en internet plantean modificar la configuración del driver agregando lo siguiente al string de conexión:?defaultFetchSize=150&useCursorFetch=trueSe vuelve a ejecutar el caso y queda resuelto.ReferenciaSAC #20630 OutOfMemoryError en MySQL - Java heapspaceEste problema se reprodujo haciendo un ForEach de lectura sobre 10000 registros con LVC grandes.
Resumen de acciones
Otra cosa que aprendimos, a entender como funciona la grafica sobre el uso de memoria, en este caso vemos un printsceen de jconsole sobre la KB del CommWiki después de haber ejecutado un día completo.
No es menor el determinar el que hay que optimizar? no se puede decir me voy a poner a trabajar en la optimización de la kb. Hay que saber qué objetos optimizar?Estaría bueno conocer lo siguiente para determinarlo:- cuantas veces se ejecuto un programa,cuales son los que mas se ejecutaron.- cuantas veces se ejecuto una sentencia sql, cuanto tardo en promedio, su peor caso? cuantos inserts/updates se hicieron
SynchronizeDocumentationhttp://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?5259Comentar el caso de uso seleccionado.
También se permite ejecutar operaciones, como se muestra en la siguiente pantalla, se genera un XML (raiz del tomcat), al abrirlos con Excel obtengoinformaciónrelevanteparaestudiar.que es lo que se corre mas para optimizar, detectar puntos críticos de la app.A partir de dicha información preliminar hacer un drilldown para entender porqué están ocurriendo.En el contexto del ejemplo hicimos varias mejoras como resultado del análisisSe habilita caching en 2 tablas de la base de datos; impactando principalmente en el objetoLoadUserContext.Se cambia el orden del objeto GetGroupRights para que utilice la clave primaria.Se elimina une referencia al objeto pgetdblink que ya no se usa ya que estaba siendo utilizado desde hwiki.Como se habilita el caching ? Revisarhttp://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?7156http://wiki.gxtechnical.com/commwiki/servlet/hwikibypageid?8968
- para el desarrollador, buena herramienta para ver como mejorar la calidad de los programas.Otras operaciones que se pueden realizar- disparar notificacionesalertas, cuando llega a un cierto tamaño avisar.
Sin ser un experto un guru, con solo instalar monitor puedo a. conocer como ejecuta mi aplicación, cuanta memoria utiliza, cuanta CPU, y conocerla infraestructura donde ejecutab. detección, rastrear erroresEs claro que hay cosas que NO responde el porfiling y monitoring _ Análisis de la base de datos _ red y ancho de banda entre los componentes2. No es menor el determinar el que hay que optimizar? no se puede decir me voy a poner a trabajar en la optimización de la kb. Hay que saber qué objetos optimizar? En base a la “observación” (monitoring) de la aplicación y generación de estadísticas (profiling), son los puntos iniciales como para empezar a encarar un tema de dimensiomiento y tunning (Cacheo de tablas, tamaño del pool, cantidad de memoria, cpu). A partir del síntoma , conocer las causas antes de tomar acciones. Seguir la metodología de los 5 why.No basta con preguntarse porque 1 vez, hay que hacerlo 5 veces, y cuando se llegue a la 5ta tengo la causa del problema.Una vez encontrada la raíz del problema aparece naturalmente la solución.Se pueden usar tanto a nivel de desarrollo como producción. 4. Si fuera uds:BajarunaHerramientaUtilizarla en ambiente de TestEvaluarutilización de RecursosIdentificarposiblesproblemas, Jugar
Les dejamos algunas referencias..._ Accendo - Certus