El propósito de su aplicación es servir bien a sus usuarios finales.
Debe ser rápida, receptiva, fácil de usar y fiable, entre otras funcionalidades deseables.
Pero mantener su software de forma que siga ofreciendo un rendimiento de primer nivel no es tan fácil.
Cuando su código empieza a llamar a funciones innecesarias, tropieza consigo mismo, detecta errores y entra en bucles adicionales, puede dar lugar a ineficiencias. Su aplicación podría volverse lenta, no responder o comportarse de forma errática.
Y si no soluciona estos problemas, el rendimiento general de la aplicación se resentirá.
En consecuencia, sus clientes pueden irritarse o dejar de utilizar su aplicación por completo debido al bajo rendimiento y la lentitud. Esto no sólo degrada su reputación, sino que también le cuesta en términos de ingresos y beneficios. Por lo tanto, es necesario analizar, revisar y depurar su código para conseguir un rendimiento óptimo. Y la forma más rápida de hacerlo es utilizando una herramienta de perfilado de software para supervisar y depurar sus códigos y eliminar los cuellos de botella relacionados con el rendimiento.
En este artículo, aprenderá sobre la creación de perfiles de software y cómo puede ayudarle. Y después, le guiaré a través de algunas de las mejores herramientas de perfilado para depurar su aplicación y optimizar su rendimiento.
¿Qué es la creación de perfiles de software?
La creación de perfiles de software es un análisis dinámico del código en el que se investiga el comportamiento de un programa utilizando los datos recogidos mientras éste se ejecuta. Su objetivo es determinar varias secciones del programa que debe optimizar para aumentar la velocidad de la aplicación, su capacidad de respuesta y disminuir su consumo de memoria y recursos.
Un perfilador de software suele medir la duración y la frecuencia de las llamadas a funciones junto con la memoria o la complejidad temporal asociada a un programa. También existen perfiladores específicos, como los perfiladores de memoria.
La creación de perfiles se realiza generalmente instrumentando el código fuente del programa. Los perfiladores pueden utilizar diferentes técnicas de perfilado, como métodos instrumentados, basados en eventos, estadísticos o de simulación.
¿Por qué es importante la creación de perfiles de software?
La creación de perfiles de software es necesaria para determinar el uso de recursos y el tiempo de ejecución asociados a una función específica. Ayuda a optimizar la velocidad del programa y, al mismo tiempo, a garantizar que consume el mínimo de recursos.
Además, se realiza para rastrear y optimizar el uso de la CPU y el tiempo de ejecución de los comandos.
Por lo tanto, es necesario elegir la herramienta de creación de perfiles de software adecuada para asegurarse de que puede depurar más rápidamente los problemas relacionados con el rendimiento para mejorar su eficacia y ofrecer una mejor experiencia al usuario final. Muchos perfiladores también vienen con informes detallados y gráficos y visualizaciones interactivos que le ayudan a encontrar la causa raíz exacta de los problemas, lo que facilita su solución.
Así pues, aquí tiene una lista de algunos de los mejores perfiladores de software que puede probar, y díganos cuál le ha funcionado mejor.
py-spy
py-spy es un excelente perfilador de muestreo para Python. Le permite echar un vistazo a todas las cosas en las que su aplicación basada en Python invierte tiempo.
Para ello, no tiene que modificar sus códigos o reiniciar el programa por completo. py-spy implica una baja sobrecarga y está desarrollado en Rust para ejecutar una mayor velocidad. No está construido para operar en el mismo proceso en el que se ejecuta su programa perfilado basado en Python. Esto implica que py-spy es altamente seguro para usar contra los códigos basados en Python de producción.
La herramienta le permite registrar perfiles, generar gráficos de llama para crear archivos SVG interactivos. También puede ver otras opciones, como cambiar las frecuencias de muestreo, las extensiones C nativas para la creación de perfiles, los subprocesos, los thread-ids, etc. Puede obtener una vista en directo de las funciones que se producen en sus programas mediante el comando ‘top’ y visualizar la pila de llamadas actual mediante el comando ‘dump’ para cada hilo de python.
Soporta todas las versiones del intérprete CPython, tales como 2.3 – 2.7 & 3.3 – 3.8. Puede instalar py-spy desde PyPI o GitHub.
Pyroscope
El software de perfilado continuo de código abierto de Pyroscope le ayuda a depurar todos los problemas de rendimiento de su aplicación en cuestión de minutos.
Puede iniciar el servidor seguido del agente sin importar lo que utilice, Docker, Linux, o esté buscando documentación de Ruby o Go, Pyroscope le cubre. Incluso si su objetivo son diez segundos o diez meses de datos de perfiles de software, su motor de almacenamiento diseñado a medida realiza consultas rápidas.
No tiene que preocuparse por la sobrecarga ni por el rendimiento de la aplicación, ya que utilizan una tecnología de perfilado por muestreo que no afecta al rendimiento. Pyroscope almacena sus datos de perfilado de forma eficaz; por lo tanto, le resultará rentable incluso si desea almacenar diferentes datos de perfilado de varias aplicaciones durante años.
Funciona en macOS, Linux y Docker, y es compatible con programas escritos en Python, Go y Ruby.
Bubbleprof
Bubbleprof de Clinic.js proporciona una forma fresca y única de perfilar su software escrito en Node.js. Utiliza una interfaz de usuario «burbuja» que ayuda a todos, desde expertos a principiantes, a determinar el tiempo asíncrono empleado en su aplicación.
Visualiza cómo funcionan sus procesos Node.js observando sus operaciones asíncronas, agrupándolas, calculando los retrasos y mapeándolos.
Bubbleprof determina los tiempos de las operaciones observando el tamaño de las burbujas dentro de un grupo específico de operaciones que puede ser su código, un núcleo de nodo o un módulo. También agrupa los grupos adyacentes para disminuir el desorden.
Para calcular los retrasos a medida que la operación fluye de un grupo a otro, Bubbleprof mide la longitud de la flecha que conecta las burbujas. Además, también utiliza diferentes colores en los procesos de medición. Simultáneamente, las líneas de color interiores representan una mezcla de tipos de operaciones asíncronas como causa del retraso.
Pyinstrument
Optimice sus códigos Python con Pyinstrument.
Le muestra por qué su código Python es lento y le ayuda a diagnosticar los problemas para que pueda tener ese rendimiento fulgurante.
Para usar Pyinstrument, no tiene que escribir un script Python; simplemente llame a Pyinstrument usando directamente la línea de comandos. Su script se ejecutará normalmente y la herramienta le ofrecerá un resumen en color de las áreas en las que la aplicación ha empleado su tiempo. También viene con una API de Python que facilita aún más el proceso.
También tiene la opción de perfilar solicitudes web en Flask y Django, para lo que han mantenido una documentación muy elaborada. Aquí, tenga en cuenta que Pyinstrument ofrece perfilado estadístico que registra la pila de llamadas cada 1 ms en lugar de rastrear cada llamada a función realizada por su programa.
Es ventajoso ya que los perfiladores estadísticos implican una menor sobrecarga en comparación con los perfiladores de rastreo. Como registra toda la pila, el seguimiento de las llamadas a funciones caras se realiza sin esfuerzo. Además, Pyinstrument también oculta (por defecto) los marcos de biblioteca, lo que le permite centrarse en las aplicaciones o módulos responsables de afectar al rendimiento.
Depurar los problemas de rendimiento es más fácil porque Pyinstrument registra el tiempo empleado utilizando el tiempo del «reloj de pared». La herramienta rastrea todo el tiempo del programa para leer archivos, descargar datos, comunicarse con una base de datos, etc.
Xdebug
Para mejorar los problemas de rendimiento de su código y hacer su experiencia de desarrollo un poco más divertida, Xdebug viene con amplias capacidades para la creación de perfiles y la depuración.
En realidad, se trata de una extensión de PHP que le permite encontrar los cuellos de botella de su aplicación PHP y analizar su rendimiento utilizando herramientas de visualización externas para generar gráficos de rendimiento.
Xdebug crea una salida detallada que muestra el camino de la aplicación hasta llegar a un error, incluyendo los parámetros que pasó a una función determinada. Esto se hace para rastrear los errores. Para ayudar al desarrollador a entender las cosas con claridad, genera información codificada por colores junto con vistas estructuradas.
También viene con un depurador remoto que puede utilizar para conectar Xdebug con un código en ejecución, IDE o navegador para ver los puntos de interrupción del código y ejecutar los códigos línea por línea. Otra característica que ofrece es la cobertura de código que muestra cuánto se ha ejecutado el código de su programa, y también le ayuda con las pruebas unitarias.
SPX
Simple Profiling eXtension(SPX) es una extensión de perfilado diseñada para PHP. Tiene algunas propiedades únicas, que la diferencian de otras extensiones de perfilado. Su uso es completamente GRATUITO y se limita únicamente a su infraestructura, lo que significa que no hay riesgo de fugas de datos.
La simplicidad de SPX hace que sea muy fácil de usar: todo lo que necesita es establecer una línea de comandos o una variable de entorno para perfilar un script. O también puede activar el botón de opción en una página web para perfilar el script. Como resultado, no tendrá que instrumentar su código manualmente.
También admite un script de línea de comandos en ejecución – Ctrl-C. Además, este proceso también elimina la necesidad de utilizar un lanzador de línea de comandos o una extensión de navegador dedicada. SPX admite múltiples métricas, unas 22, entre las que se incluyen varias métricas de tiempo y memoria, objetos, archivos en uso, E/S, etc.
Puede recopilar datos sin salir del contexto. Su interfaz de usuario web permite configurar/activar la creación de perfiles para la sesión del navegador que se esté utilizando en ese momento y enumera todos los detalles e informes de los scripts perfilados. La interfaz de usuario web le permite seleccionar un informe específico para un análisis más profundo y cuenta con algunas visualizaciones interactivas como Flamegraph, perfil plano y línea de tiempo que pueden escalar a llamadas de función en millones.
Prefijo
Prefix de Stackify es un perfilador de código fácil de instalar y ligero que muchos desarrolladores adoran. Le ayuda a eliminar los cuellos de botella en el rendimiento de su aplicación para optimizarla y mejorar la experiencia del usuario.
Las capacidades superiores de rastreo y perfilado de Prefix le permiten encontrar rápidamente excepciones ocultas, consultas SQL lentas y mucho más. Proporciona a sus desarrolladores el verdadero poder del APM (control del rendimiento de las aplicaciones). Para ello, Prefix valida el rendimiento del código de la forma en que está escrito y le permite empujar los códigos de mejor rendimiento a prueba.
De este modo, recibe menos tickets de soporte de la parte de producción y ayuda a los responsables de desarrollo a alcanzar antes los objetivos. Descubre todas las consultas de bajo rendimiento, los cuellos de botella desconocidos y las consultas generadas por ORM.
También puede realizar un seguimiento de cada parámetro de llamada SQL, descargar los tiempos y ver los registros afectados. Prefix también simplifica la detección de patrones N 1. Olvídese de ordenar todos esos registros desordenados; reúnalos para localizar los problemas fácilmente.
Prefix le permite encontrar directamente el contexto de un registro sospechoso dentro de una solicitud de consulta y saltar de un registro a una traza para depurar sin esfuerzo. Prefix arroja luz sobre las dependencias de bajo rendimiento, lo que resulta útil para encontrar excepciones ocultas y trabajar con código heredado o secciones del marco de trabajo. Estas dependencias pueden ser servicios web, servicios de terceros, servicios de caché y otros.
Prefix funciona en Windows y Mac y es compatible con .Net, Ruby, Java, PHP, Python y Node.js.
Scalene
Scalene es un perfilador de GPU, CPU y memoria de alta precisión y rendimiento para programas basados en Python. Ofrece varias ventajas sobre otros perfiladores, como ejecutar órdenes de magnitud más rápidas y ofrecer información más detallada.
Scalene es increíblemente rápido y utiliza el muestreo en lugar de la instrumentación. Ni siquiera depende de las facilidades de rastreo de Python. Además, su sobrecarga suele ser inferior al 10-20%. Esta herramienta realiza el perfilado del software a nivel de línea y señala aquellas líneas de código responsables del tiempo de ejecución de su programa.
Estos detalles son más valiosos que los del perfilado a nivel de función. Scalene separa el tiempo empleado puramente en Python del del código nativo que incluye bibliotecas. Como la mayoría de los programadores de Python no optimizarán el rendimiento del código nativo, los desarrolladores pueden centrar sus esfuerzos en optimizar los códigos que realmente se pueden mejorar.
Destaca en rojo los puntos calientes que le facilitan la detección del tiempo de CPU/asignación de memoria y separa fácilmente el tiempo de sistema para encontrar problemas de E/S. Scalene puede informar del tiempo de la GPU, perfilar el uso de la memoria y realizar un seguimiento del uso de la CPU. Scalene también puede identificar posibles fugas de memoria, perfilar el volumen de copia y generar perfiles reducidos para las líneas de código que consumen más del 1% de la CPU.
VisualVM
VisualVM, la herramienta de solución de problemas todo en uno para Java, está diseñada para utilizarse tanto en la fase de producción como en la de desarrollo. Es un software visual que integra funcionalidades ligeras de perfilado y herramientas JDK de línea de comandos.
VisualVM supervisa las aplicaciones que se ejecutan en Java 1.4 y soluciona sus problemas utilizando varias tecnologías como JMX, jvmstat, Attach API y Serviceability Agent. Esta herramienta se adapta perfectamente a los distintos requisitos de los ingenieros de calidad, los administradores de sistemas y los usuarios finales.
Detecta automáticamente las aplicaciones basadas en Java que se ejecutan local y remotamente y las enumera. La herramienta también permite definir los programas manualmente mediante la conexión JMX. Para cada proceso, muestra los datos típicos del tiempo de ejecución, como el PID, los argumentos pasados, el inicio JDK, la clase principal, las banderas JVM, la versión JVM y las propiedades del sistema y de los argumentos.
VisualVM supervisa el uso de la CPU, el heap y el metaespacio o la memoria de generación permanente, los hilos en ejecución y las clases cargadas en una aplicación. Muestra todos los hilos en ejecución en una línea de tiempo con los tiempos agregados de reposo, ejecución, estacionamiento, monitorización y espera.
Tanto la instrumentación como el muestreo de perfiles pueden realizarse utilizando VisualVM para la gestión de la memoria y el rendimiento de la aplicación. Muestra los volcados de hilos para proporcionar una visión rápida de los procesos. También visualiza y crea instantáneas .hprof bajo demanda para ayudarle a descubrir ineficiencias en el uso del heap y depurar fugas de memoria.
Además, VisualVM puede leer datos básicos sobre un proceso basado en Java bloqueado junto con su entorno. Puede analizar sus aplicaciones fuera de línea; puede guardar el entorno de ejecución y la configuración de la aplicación con volcados de heap tomados, volcados de hilos e instantáneas de perfiles que puede procesar fuera de línea más adelante.
Funciona en Windows, Linux y Unix.
Perfilador Orbit
Visualice su aplicación C/C y encuentre rápidamente los problemas de rendimiento utilizando Orbit Profiler. Se trata de una herramienta de depuración y un perfilador independiente cuyo objetivo es ayudar a los desarrolladores a visualizar y comprender el flujo de ejecución de aplicaciones complejas.
Proporciona una visión nítida de todo lo que sucede dentro de la aplicación para que pueda eliminar rápidamente los cuellos de botella de rendimiento y restaurar el alto rendimiento de su aplicación.
Orbit Profiler puede trabajar en cualquier aplicación C o C de forma eficiente, siempre que pueda acceder al archivo PDB. A continuación, comenzará a realizar el perfilado una vez que haya completado la descarga de su programa. La herramienta salta al proceso de destino, se engancha a las funciones seleccionadas y realiza el perfilado.
Incluso puede trabajar en sus builds finales o de envío optimizados. Aparte de la instrumentación dinámica, Orbit Profiler ofrece también capacidades de muestreo «siempre activas», lo que resulta rápido, disponible en todo momento y robusto.
Funciona en Windows y Linux.
Perfilador Uber JVM
Dotado de capacidades avanzadas de creación de perfiles, Uber JVM Prof iler es otra buena opción para sus aplicaciones basadas en Java.
Ofrece un agente Java que recopila varias trazas de pila y métricas para los procesos JVM de Spark/Hadoop de forma distribuida, por ejemplo, métricas de memoria/CPU/IO.
La herramienta puede rastrear argumentos y métodos java en códigos de usuario sin modificarlos. También puede utilizarla para rastrear la latencia de llamada de los nodos de nombre HDFS para cada aplicación Spark y encontrar problemas. Incluso puede rastrear las rutas de los archivos HDFS de la aplicación Spark para encontrar archivos calientes y realizar una mayor optimización.
Uber JVM Profiler se creó originalmente para perfilar aplicaciones Spark que generalmente incluyen muchas máquinas o procesos para una aplicación. Por lo tanto, la gente puede correlacionar métricas fácilmente para estas máquinas o procesos.
Sin embargo, la herramienta funciona como un agente java típico, y puede utilizarla para cualquiera de sus procesos JVM. Sus características incluyen:
- Depuración del uso de memoria de los ejecutores de aplicaciones Spark, como la memoria java heap, la memoria nativa, la memoria no heap, el buffer pool y el memory pool
- Depuración del uso de la CPU y del tiempo de recolección de basura
- Depuración de métodos de clases java por su frecuencia y tiempo o Perfilado de duración
- Argument Profiling (depuración y rastreo de la llamada a un método de clase java y su valor argumental)
- Stacktrack Profiling y generación de Flamegraphs para el tiempo de CPU
- Depuración de métricas de E/S y métricas de hilos de la JVM
Tracy
Tracy es una herramienta útil para ayudar a los desarrolladores a depurar programas PHP fácilmente. Tiene un diseño amigable y características avanzadas como soporte CLI, depuración de llamadas AJAX y más.
Puede encontrar y corregir errores rápidamente, volcar variables, registrar errores, visualizar el consumo de memoria y determinar el tiempo de ejecución de consultas o scripts. El uso de códigos de colores y el resaltado de los problemas en rojo con explicaciones claras le ayudarán a visualizar las excepciones y los errores con facilidad y a comprenderlos.
Tracy incorpora funciones de registro y autodetección del entorno. Almacena datos en archivos de registro y muestra mensajes de error del servidor a un visitante durante los tiempos de inactividad. Tracy también puede integrarse con Drupal 7, OpenCart, WordPress, etc.
vprof
vprof es un perfilador visual para aplicaciones Python. Proporciona visualizaciones ricas e interactivas de las diferentes características de su programa Python, como el uso de memoria y el tiempo de ejecución.
Está disponible bajo licencia BSD y soporta Python 3.4 y superiores.
Conclusión
El rendimiento de las aplicaciones es un factor crucial para satisfacer las expectativas de los usuarios finales. Y si se producen problemas de rendimiento, debe estar preparado para diagnosticar el problema antes de que afecte a la experiencia del usuario final.
Por lo tanto, siga optimizando sus aplicaciones y solucione los problemas inmediatamente para seguir ofreciendo un rendimiento superrápido de las aplicaciones a los usuarios utilizando las herramientas que he mencionado en este artículo.
He aquí una rápida tabla comparativa que muestra los perfiladores anteriores y para qué se utilizan mayoritariamente.
Nombre | Idiomas |
py-spy | Python |
Pyroscope | Python, Ruby, Go |
Bubbleprof | Node.js |
Pyinstrument | Python |
Xdebug | PHP |
SPX | PHP |
Prefijo | Python, .NET, Java, Node.js, Ruby, PHP |
Escaleno | Python |
VisualVM | Java |
Orbit Profiler | C |
Perfilador Uber JVM | Java |
Tracy | PHP |
vprof | Python |