Software de creación de perfiles mediante gráficos de rendimiento y llama

En esta publicación de blog, veremos cómo usar perf (también conocido como: perf_events) junto con Flame Graphs. Se utilizan para generar una representación gráfica de las funciones que se llaman en nuestro software de elección. Percona Server para MySQL se usa aquí, pero se puede extender a cualquier software que pueda resolver un seguimiento de pila.

Antes de continuar, una palabra de precaución. Como con cualquier herramienta de perfilado, NO ejecute esto en sistemas de producción a menos que sepa lo que está haciendo.

Instalación de Paquetes Requeridos

Para simplificar, use comandos para CentOS 7, pero las cosas deberían ser iguales para las distribuciones basadas en Debian (apt-get install herramientas de linux – $ (uname -r) en lugar de ti gnam el comando es la única diferencia en los pasos).

Para instalar perf, simplemente emita:

Para usar el proyecto Flame Graphs:

¡Aquí vamos! Estamos listos para irnos.

Toma de muestras

Los gráficos de llamas son una forma de mostrar datos, por lo que necesitamos tener algunas muestras en las que podamos basarnos. Hay tres maneras en que podemos hacer esto. (Tenga en cuenta que usamos el -pags marca para capturar datos solo de nuestro proceso de interés, pero potencialmente podemos capturar datos de todos los procesos en ejecución si es necesario).

1- Capture solo por un tiempo (diez segundos aquí):

2- Captura para enviar señal de interrupción (CTRL-C):

3- Captura para toda la vida del proceso:

o

Nos vemos obligados a capturar datos de todos los procesos en el primer caso de la tercera variante, ya que es imposible saber el número de identificación del proceso (PID) de antemano (con el comando ejecutado, en realidad iniciamos el servicio MySQL). Este tipo de comando es útil cuando desea obtener datos desde el comienzo exacto del proceso, lo que no es posible de otra manera.

En la segunda variante, ejecutamos una consulta en un servicio MySQL que ya se está ejecutando, por lo que podemos usar -pags bandera para capturar datos en el proceso del servidor. Esto es útil si desea capturar datos en el momento exacto en que se ejecuta un trabajo, por ejemplo.

preparación de la muestra

Después de la captura inicial, debemos hacer que los datos recopilados sean «legibles». Esto es necesario porque se almacena en formato binario por registro de rendimiento. Para esto usamos:

Sigue leyendo perf.datos por defecto, que es lo mismo por defecto registro de rendimiento utiliza para su archivo de salida. Se puede cancelar con el uso. -I la bandera es -o bandera, respectivamente.

Ahora podemos leer el archivo de texto generado, ya que estará en una forma legible por humanos. Sin embargo, cuando haga esto, comprenderá rápidamente por qué necesitamos agregar todos estos datos en una forma más inteligible.

Generación de diagramas de llama

Podemos hacer lo siguiente en una sola línea, canalizando la salida del primero como entrada al segundo. Ya que aún no lo hemos agregado. Gráfico de llamas git map a nuestra ruta, necesitamos usar rutas completas.

Ahora podemos abrir el archivo .svg en cualquier navegador y comenzar a analizar gráficos ricos en información.

¿Cómo se ve?

Por ejemplo, dejaré los comandos completos, sus salidas y una captura de pantalla de un gráfico de llama generado por el proceso usando el método de captura de datos #2. ejecutaremos uno INSERT INTO … SELECT solicitud a la base de datos, para que podamos analizar su ejecución.


El lector atento verá que aquí hemos dado un paso más allá y hemos unido los pasos n.º 2 y n.º 3 a través de una tubería (|) para evitar escribir y leer del perf.script el archivo de salida. También hay hora salidas para que podamos tener una estimación de la cantidad de datos que genera la herramienta (~ 2Mb en 1min 25segs); esto, por supuesto, varía dependiendo de varios factores, así que tómalo con pinzas y pruébalo en tu entorno.

El gráfico de llama resultante es:

Un claro candidato para la optimización es el trabajo escribir_registrar: si podemos hacer que esa función sea más rápida, existe un gran potencial para reducir el tiempo de ejecución general (cuadrado en azul en la esquina inferior izquierda, podemos ver un total de ~ 60% de las muestras que se tomaron en este código). En la última sección a continuación, enlazamos a una publicación de blog que explica más sobre cómo interpretar un gráfico de llamas, pero por ahora, sabe que puede pasar el mouse sobre los nombres de las funciones y cambiar dinámicamente la información que se muestra en la esquina inferior. izquierda. También puede ver mejor con las siguientes guías:

gráficos de llamas

Conclusiones

Para el equipo de soporte, utilizamos este procedimiento en muchos casos en los que necesitamos tener una visión detallada de lo que se está ejecutando MySQL y durante cuánto tiempo. De esta forma, podemos tener una mejor idea de qué operaciones hay detrás de una carga de trabajo específica y actuar en consecuencia. ¡Este procedimiento se puede utilizar tanto para la optimización como para la solución de problemas y es una herramienta muy poderosa en nuestro cinturón de herramientas! Se sabe que los humanos son mejores para traducir imágenes que texto, y esta herramienta lo explota brillantemente, en mi opinión.

Enlaces conectados

La interpretación de los diagramas de llama (desplácese hacia abajo hasta la sección «Interpretación del gráfico de llama»)

Flame Graphs 201, un gran webinar de Marcos, si quieres profundizar en esto

Por supuesto, Brendan Gregg (la mente maestra detrás del proyecto Flame Graph) tiene aún más información sobre esto

Author: Ing. Luis

A lo largo de conocer Windows y otros sistemas operativos me eh encontrado con diversos tipos de error, ahora brindo soluciones según mi experiencia-

Deja un comentario