Cómo visualizar el rendimiento de su aplicación con un gráfico de llama SVG

Publicado: 2023-02-21

Los gráficos de llama SVG son una excelente manera de visualizar el rendimiento de su aplicación. Al mostrar el tiempo dedicado a cada función, puede identificar rápidamente las áreas de su código que ocupan demasiado tiempo. Para mostrar un gráfico de llama SVG, deberá usar una herramienta que pueda generar uno. Hay muchas herramientas de código abierto disponibles, como flamegraph.io. Una vez que haya generado su gráfico de llamas, puede incrustarlo en su sitio web o blog usando una etiqueta. También puede usar una herramienta como Google Sheets para mostrar su gráfico de llamas. Simplemente cree una nueva hoja de cálculo, seleccione "Insertar> Imagen" y luego pegue la URL de su gráfico de llamas.

¿Cómo se ejecuta un gráfico de llama?

¿Cómo se ejecuta un gráfico de llama?
Imagen por: badawi.io

Para ejecutar un gráfico de llama, debe tener algunas cosas instaladas en su computadora. Lo primero que necesitas es el navegador Google Chrome. A continuación, debe instalar la extensión Flame Graph. Una vez que haya instalado ambas cosas, debe abrir el navegador Google Chrome e ir a la página de la extensión Flame Graph . A partir de ahí, deberá hacer clic en el botón "Crear un nuevo gráfico de llamas". Esto abrirá una nueva pestaña donde deberá ingresar la URL del sitio web para el que desea crear un gráfico de llamas. Una vez que haya ingresado la URL, deberá hacer clic en el botón "Crear gráfico de llama". Esto tomará unos momentos para crear el gráfico de llama. Una vez finalizado, podrás ver los resultados.

El gráfico de llamas muestra un seguimiento de solicitud distribuido y un resumen de cada llamada de servicio que se produjo durante la ejecución de la solicitud. Los gráficos de llama de rastros distribuidos muestran datos de latencia y error para ayudar a los desarrolladores a identificar cuellos de botella en sus aplicaciones. El artículo proporciona una explicación de cómo interpretar un gráfico de llama, así como un ejemplo, así como otros métodos para rastrear trazas distribuidas. El eje Y muestra la profundidad de la pila de llamadas (el número de llamadas). Cuando hace clic en un lapso en un gráfico de llama, normalmente verá un resumen de la duración y el error asociado con la llamada. Puede encontrar métricas, registros, datos de rendimiento de la red, puntos de acceso de código y otra información contextual haciendo clic en las pestañas debajo del gráfico de llamas. El diagrama espiral está formado por un círculo rodeado por un conjunto de anillos. Los gráficos de llamas se pueden usar para visualizar los métodos y las rutas de código que se usan para cumplir con una solicitud de un generador de perfiles de código. Las herramientas de seguimiento de distribución y supervisión del rendimiento de aplicaciones de Datadog le permiten realizar un seguimiento de la ruta de todas las solicitudes en todos los servicios.

Los gráficos de llama brindan a los desarrolladores una manera rápida y fácil de ver los problemas de rendimiento

Los desarrolladores pueden utilizar gráficos de llamas para visualizar el rendimiento de las aplicaciones distribuidas en cuestión de segundos. Los gráficos de Flame pueden ayudar a los desarrolladores a identificar y corregir problemas de rendimiento al proporcionar una representación gráfica del seguimiento de la solicitud y resaltar dónde tuvo problemas la aplicación.

¿Cómo se busca en Flamegraph?

Hay algunas formas diferentes de buscar en Flamegraph. Una forma es utilizar el cuadro de búsqueda que se encuentra en la parte superior derecha de la pantalla. Este cuadro de búsqueda le permite escribir palabras clave que luego se utilizarán para buscar el flamegraph. Otra forma de buscar en Flamegraph es usar la función de navegación. Esta función se puede encontrar en el lado izquierdo de la pantalla. Esta función le permite navegar a través de las diferentes categorías de flamegraph.

Con la llegada de los gráficos de llamas, ahora es más fácil buscarlos. Hay una ruta de código de escritura debajo del marco TCP_send() grande a la derecha. Si hace clic en uno de los marcos resaltados, puede ver por qué puede ocurrir esto. Tcp_Send estuvo presente en el 59,1 % de las muestras analizadas. Otros términos intrigantes para buscar incluyen re?cv, spin, copy y x.

¿Por qué se llama gráfico de llama?

Al crear una visualización, Neelakanth y Roch utilizaron colores completamente aleatorios. La CPU estaba caliente (ocupada), lo que explica por qué elegí solo colores cálidos primero. Debido a que se parecían a las llamas, los gráficos de llamas rápidamente se hicieron populares.

Los peligros de las llamas

El evento de fuego es una forma entretenida de desatar la frustración y comenzar una discusión animada. También pueden conducir a una ruptura en las relaciones y hacer que las personas se desmoronen.
La mejor manera de lidiar con las llamas es ignorarlas. Alguien puede publicar una llama; deberías ser tú quien lo ignore. No hay necesidad de responder. No vale la pena la energía gastada.
Flame puede ser una forma divertida de comunicarse, pero también puede ser perjudicial en algunos casos si se usa incorrectamente. No tienes que tener miedo a las llamas; en cambio, debes evitarlos y mantener la calma.

¿Quién inventó los Flamegraphs?

Los gráficos de llamas se han convertido en una herramienta importante para el análisis de rendimiento en muchos idiomas, así como en Netflix y otras industrias. Su autor, Brendan Gregg, creó Flame Graph, que se publicó en la edición de junio de 2016 de Communications of the ACM.


Visor de gráficos de llamas

Un visor de gráficos de llamas es un tipo de software que permite a los usuarios visualizar datos en forma de gráfico. Este software se usa a menudo para solucionar problemas con computadoras u otros dispositivos.

Puede usar speedscope para ver grandes perfiles de rendimiento en una forma basada en la web. FlameGraphs de Brendan Gregg se inspiró en el panel de rendimiento de las herramientas para desarrolladores de Chrome. Los datos del sistema no se transmiten a ningún servidor y se ejecuta completamente en el navegador. Chrome y Firefox deberían funcionar con todas las plataformas (aunque solo he probado Mac). En la vista pesada izquierda, las pilas idénticas se agrupan independientemente de si se han grabado secuencialmente. La pila de cada padre se ordena de modo que su pila más pesada esté a la izquierda, de ahí la etiqueta de zurdos. Una vista detallada de la situación lo ayudará a comprender dónde se encuentra en términos de cuántas llamadas de función tiene en una situación determinada.

Rudro Samanta ha estado usando speedscope para visualizar perfiles de aplicaciones de iOS capturados con Xcode. Jest se usa para escribir casos de prueba, Travis CI se usa para integrar código continuamente, Coveralls se usa para informes de cobertura de prueba, Parcel se usa para transformar el código fuente y más bonito se usa para formatear automáticamente el código. Una forma de lograr esto es aumentar la cantidad de formatos que Speedscope puede importar y una forma de hacer que las integraciones sean más estrictas. Llevo nueve meses trabajando en speedscope y siento que lo he dejado escapar. Como ingeniero, me esforzaré por crear sistemas y conjuntos de herramientas que sean fáciles de mantener, comprensibles y útiles para ayudar a las personas a resolver problemas complejos en todo el mundo. Creo que dedicaré más tiempo a proyectos creativos y colaborativos este año.

Gráfico de llama en línea

Un gráfico de llama es una representación gráfica de los datos de perfilado, que normalmente se utiliza para mostrar las características de rendimiento de los programas de software. La altura de cada sección representa la cantidad de tiempo dedicado a esa sección de código en particular. Las secciones están ordenadas de izquierda a derecha según el momento en que fueron convocadas.

A diferencia de los árboles y los gráficos, los gráficos de llamas utilizan el espacio de la pantalla de manera eficaz al presentar una gran cantidad de información en un formato pequeño. Al hacer clic aquí, aprenderá cómo convertir un árbol en un gráfico de llamas, así como cuáles son las características clave de un gráfico de llamas. Los gráficos de llamas se utilizan en Google Cloud Profiler para mostrar datos de perfiles. Cuando sigue una pila de llamadas, el ancho de los marcos disminuye porque el tiempo de CPU total de un destinatario no puede ser mayor que el tiempo de CPU de otro destinatario. La forma de la llama es causada por este comportamiento. El gráfico de llama ahora aparece de la siguiente manera después de eliminar el exceso de espacios en blanco y colorear marcos usando el tiempo de CPU propio. Aunque se han conservado las pilas de llamadas para foo1 y foo2, la pila que comenzaba con foo2 y terminaba con foo1 ahora se encuentra junto al marco.

¿Cómo se hace un gráfico de llamas?

Para generar gráficos de llama, primero debe muestrear el seguimiento de la pila. Tradicionalmente se ha dividido en dos tipos: perfiles de sistema, como Linux perf, que muestran rutas de código de sistema (p. ej., JVM GC, syscalls, TCP), pero no perfiles de Java. Hay disponibles perfiladores de JVM, como hprof, lJP y perfiladores comerciales.

Gráfico de llama Vs gráfico de llama

Hay algunas diferencias clave entre un gráfico de llamas y un gráfico de llamas. Un gráfico de llamas normalmente muestra una línea de tiempo de eventos, mientras que un gráfico de llamas muestra un seguimiento de la pila. Los gráficos de llamas se usan a menudo para depurar problemas de rendimiento, mientras que los gráficos de llamas se usan más comúnmente para visualizar datos de rendimiento. Los gráficos de llamas son una excelente manera de ver cómo un programa está empleando su tiempo. Pueden mostrarle dónde están los cuellos de botella y cómo el programa utiliza los recursos. Los gráficos de llamas son una excelente manera de ver cómo un programa usa los recursos.

Como técnica tosca pero útil para determinar qué rutas de código están activas (porque están ocupadas en la CPU), la creación de perfiles a una tasa fija produce buenos resultados. Los gráficos de llamas le permiten identificar rápidamente las rutas de código activo mediante el muestreo de seguimientos de pila. Los ejemplos My Linux perf (perf_events) y DTrace son ejemplos de software que puede instalar. FlameGraph es una herramienta de Perl que genera un SVG interactivo y le permite ver detalles arrastrando y soltando sobre las imágenes. La visualización puede parecer similar a otras de los generadores de perfiles, pero difiere de ellos en algunos aspectos. Debido a que esto se usó inicialmente para visualizar lo que está caliente en la CPU, se lo denominó gráfico de llama. Consulte la sección del perfil eBPF (8) para obtener un método de ejecución con menos gastos generales en los kernels de Linux más nuevos (no se recomienda el perfil eBPF (8)).

Consulte la sección Gráficos de llamas de mi página perf_events para obtener más información sobre perf. Es posible generar una salida doblada directamente desde el informe de rendimiento de Linux 4.5 al incluir un modo doblado, al que solo se puede acceder usando stackcollapse-perf.pl. En esta muestra se proporciona una línea de kernel (-a) y usuario (-d) separada por pilas de usuario y kernel (-f) a 99 Hertz (-F 99), y hay un límite de tiempo de 60 segundos para las muestras. Los gráficos de llamas se pueden generar usando SystemTap v1.7 en Fedora 16. El temporizador también se puede usar para muestrear trazas de pila. Esta sonda de perfil se ejecuta a la velocidad del reloj del sistema (CONFIG_HZ). SystemTap puede usar su función de agregación systemTap para agregar en el núcleo y pasar un informe (menos detallado) a los usuarios.

Los gráficos se generaron utilizando KVM (host Ubuntu) (32 bits) en un huésped Fedora 16 (con una CPU virtual). En bare metal, algunas rutas de código y proporciones de muestra serán muy diferentes. Es posible hacer clic sobre los elementos en los datos de perfiles para ver porcentajes (pero no hacer clic para hacer zoom, ya que esta es una nueva versión), pero no para acercar. El gráfico es una excelente herramienta para aprender más sobre las funciones internas de Linux. En un host de hipervisor de kernel de illumos, tanto el usuario como la pila de kernel se pueden ver en este ejemplo. Las versiones independientes SVG y PNG también están disponibles. Para observar cómo se asigna el tiempo del kernel para crear procesos de corta duración, realicé una carga de trabajo de este gráfico de llamas.

Por lo general, se usa un gráfico de llamas para identificar la carga de interrupción del kernel al mostrar el cabello. El Equilibrio NUMA en la versión 1716 de Ubuntu consume más de la mitad de los ciclos de la CPU para equilibrar la memoria entre los nodos, lo que genera un rendimiento lento. Una reescritura del gráfico de llamas en D3 es esencial para mantener constantes las órdenes de fusión sin tener que regenerar el gráfico de llamas. En mi charla JavaOne 2016 Análisis de rendimiento de Java en Linux con gráficos de llamas, cubro las técnicas más recientes para producir gráficos de llamas de modo mixto utilizando el rendimiento de Linux. JDK8u60 incluye una función llamada /PreservePointerFrame que le permite generar gráficos de rendimiento y llama. JDK-8068945 se agregó a la biblioteca JDK como un parche activo para la creación de perfiles de pila (puntero de marco). Cuando se utiliza el registro RBP como puntero de cuadro en el código compilado para x64, se considera que es el puntero de cuadro adecuado.

Cuando se ejecuta DTrace como un método Jstack, puede realizar un seguimiento de las pilas a nivel de usuario, así como de los métodos y clases de Java. Para los programas Java, Stackcollapse.pl y flamegraph.pl se utilizan para generar gráficos de llamas de CPU . Algunas versiones de JVM no son compatibles con ustack helper, lo que tiene una serie de problemas. Funciona con cualquier combinación de seguimiento de pila más valor, no solo seguimiento de pila con recuentos de CPU. El primer problema es que es posible que Jstack() no pueda recorrer las pilas correctamente debido al error JDK-6260864, ​​que se presentó en 2005 y aún no se solucionó en 2014. Este error hace que la mayoría de las pilas de muestra en mis cargas de trabajo de producción romper. Podría obtener información sobre la asignación de memoria del dispositivo, las E/S del dispositivo, los patrones de llamadas al sistema, los eventos fuera de la CPU y las llamadas a funciones específicas. Si se usa alguno de estos, se puede obtener un seguimiento de la pila con el valor relevante: conteos, bytes o latencia. Los gráficos de llama también se pueden ver en la página Gráficos de llama.

Gráfico de llama Java

Un gráfico de llama es un tipo de visualización de datos que se utiliza para representar el rendimiento de un programa de software. Es un gráfico que muestra la cantidad de tiempo que un programa pasa en cada función. La altura de las barras representa la cantidad de tiempo que el programa pasa en esa función. El ancho de las barras representa la cantidad de tiempo que el programa pasa en esa función en relación con las otras funciones.

Los gráficos Flame han surgido recientemente como una nueva forma popular de visualizar el uso de la CPU en Java. Se pueden crear utilizando el generador de perfiles de Java ligero de Google (code.google.com) y mi software de gráficos de llamas (github). Es bueno que los gráficos de llamas no sean una característica separada de los generadores de perfiles de Java en el futuro. En esta publicación de blog, veremos un método basado en JVMTI solo para Java que, si bien funciona, tiene algunas limitaciones. Jeremy Manson ha creado un generador de perfiles de Java ligero que se puede utilizar para probar la CPU. Este informe de muestra se genera cuando Java se inicia hasta que se cierra, con un archivo trace.txt adjunto. Para ejecutar el programa, hay algunos costos.

Para mi programa, fue menor (un aumento de solo el 1 % en la tasa de solicitud y un aumento del 7 % en el consumo de CPU). Si se debe reducir la frecuencia de muestreo, consulte las secciones siguientes. La salida del programa flamegraph.pl se puede personalizar con una variedad de opciones (lista -h), incluido el título. El perfilador honesto de Richard Warburton, que se basa en la misma técnica de perfilado, también resulta útil. Es posible que reduzca la frecuencia de muestreo de 100 Hz a 50 Hz o menos si tengo la intención de recopilar grandes cantidades de datos durante un largo período de tiempo.