L'objectif de votre application est de bien servir vos utilisateurs finaux
Elle doit être rapide, réactive, facile à utiliser et fiable, entre autres fonctionnalités souhaitables
Mais il n'est pas facile de maintenir votre logiciel de manière à ce qu'il continue à fournir des performances de haut niveau
Lorsque votre code commence à appeler des fonctions inutiles, qu'il trébuche sur lui-même, qu'il attrape des bogues et qu'il se lance dans des boucles supplémentaires, il peut en résulter des inefficacités. Votre application peut devenir lente, ne plus répondre ou se comporter de manière erratique
Et si vous ne corrigez pas ces problèmes, les performances globales de l'application en pâtiront
Par conséquent, vos clients peuvent être irrités ou cesser d'utiliser votre application en raison des mauvaises performances et de la lenteur. Cela ne nuit pas seulement à votre réputation, mais vous coûte également en termes de revenus et de bénéfices. C'est pourquoi votre code doit être analysé, revu et débogué afin d'obtenir des performances optimales. Le moyen le plus rapide d'y parvenir est d'utiliser un outil de profilage logiciel pour surveiller et déboguer vos codes et éliminer les goulets d'étranglement liés aux performances
Dans cet article, vous découvrirez ce qu'est le profilage logiciel et comment il peut vous aider. Ensuite, je vous présenterai quelques-uns des meilleurs outils de profilage pour déboguer votre application et optimiser ses performances
Qu'est-ce que le profilage logiciel ?
Le profilage logiciel est une analyse dynamique du code qui permet d'étudier le comportement d'un programme à l'aide des données collectées lors de son exécution. Il vise à déterminer les différentes sections du programme que vous devez optimiser pour augmenter la vitesse et la réactivité de l'application et réduire sa consommation de mémoire et de ressources
Un profileur logiciel mesure généralement la durée et la fréquence des appels de fonction ainsi que la complexité de la mémoire ou du temps associés à un programme. Il existe également des profileurs spécifiques, comme les profileurs de mémoire
Le profilage est généralement réalisé en instrumentant le code source du programme. Les profileurs peuvent utiliser différentes techniques de profilage telles que les méthodes instrumentées, basées sur les événements, statistiques ou de simulation
Pourquoi le profilage des logiciels est-il important ?
Le profilage logiciel est nécessaire pour déterminer l'utilisation des ressources et le temps d'exécution associés à une fonction spécifique. Il permet d'optimiseur la vitesse du programme et, en même temps, de s'assurer qu'il consomme un minimum de ressources
En outre, il permet de suivre et d'optimiser l'utilisation de l'unité centrale et le temps d'exécution des commandes
Par conséquent, il est nécessaire de choisir le bon outil de profilage de logiciel pour s'assurer que vous pouvez déboguer les problèmes liés à la performance plus rapidement afin d'améliorer son efficacité et d'offrir une meilleure expérience à l'utilisateur final. De nombreux profileurs sont également fournis avec des rapports détaillés, des graphiques interactifs et des visualisations qui vous aident à trouver la cause exacte des problèmes, facilitant ainsi leur résolution
Voici donc une liste des meilleurs profileurs de logiciels que vous pouvez essayer, et dites-nous ce qui a le mieux fonctionné pour vous
espionne
espionne est un excellent profileur d'échantillonnage pour Python. Il vous permet d'obtenir un aperçu de toutes les choses sur lesquelles votre application basée sur Python passe du temps
Pour cela, vous n'avez pas besoin de modifier vos codes ou de redémarrer le programme. py-spy implique peu de frais généraux et est développé en Rouille pour exécuter une plus grande vitesse. Il n'est pas conçu pour fonctionner dans le même processus que celui où s'exécute votre programme profilé en Python. Cela implique que py-spy est très sûr et sécurisé pour être utilisé contre les codes de production basés sur Python
L'outil vous permet d'enregistrer des profils, de générer des graphiques de flamme et de créer des fichiers SVG interactifs. Vous pouvez également visualiser d'autres options, telles que la modification des taux d'échantillonnage, les extensions C natives pour le profilage, les sous-processus, les identifiants de threads, etc. Vous pouvez obtenir une vue en direct des fonctions qui se déroulent dans vos programmes à l'aide de la commande "top" et afficher la pile d'appels actuelle à l'aide de la commande "dump" pour chaque fil python
Il supporte toutes les versions de l'interpréteur CPython, telles que 2.3 - 2.7 & 3.3 - 3.8. Vous pouvez installer py-spy depuis PyPI ou GitHub
Pyroscope
Le logiciel open-source de profilage continu Pyroscope vous aide à déboguer tous les problèmes de performance de votre application en quelques minutes
Vous pouvez démarrer le serveur suivi de l'agent, peu importe ce que vous utilisez, Docker, Linux, ou si vous cherchez des docs Ruby ou Go, Pyroscope vous couvre. Même si vous visez dix secondes ou dix mois de données de profilage logiciel, leur moteur de stockage conçu sur mesure permet des requêtes rapides
Vous n'avez pas à vous soucier des frais généraux ou des performances de l'application car ils utilisent une technologie de profilage par échantillonnage qui n'affecte pas les performances. Pyroscope stocke vos données de profilage de manière efficace ; il est donc rentable pour vous, même si vous souhaitez stocker différentes données de profilage provenant de diverses applications pendant des années
Il fonctionne sur macOS, Linux et Docker, et prend en charge les programmes écrits en Python, Aller et Ruby
Bubbleprof
Bubbleprof de Clinic.js offre une façon nouvelle et unique de profiler votre logiciel écrit en Node.js. Il utilise une interface "bulle" qui aide les experts comme les débutants à déterminer le temps asynchrone passé dans votre application
Il visualise le fonctionnement de vos processus Node.js en observant les opérations asynchrones, en les regroupant, en calculant les délais et en les cartographiant
Bubbleprof détermine les délais des opérations en observant la taille des bulles au sein d'un groupe spécifique d'opérations qui peut être votre code, un cœur de nœud ou un module. Bubbleprof met également en boîte les groupes adjacents afin de réduire l'encombrement
Pour calculer les délais lorsque l'opération passe d'un groupe à l'autre, Bubbleprof mesure la longueur des flèches qui relient les bulles. En outre, il utilise différentes couleurs dans les processus de mesure. Simultanément, les lignes colorées intérieures représentent un mélange de types d'opérations asynchrones à l'origine du retard
Pyinstrument
Optimisez vos codes Python avec Pyinstrument
Il vous montre pourquoi votre code Python est lent et vous aide à diagnostiquer les problèmes afin que vous puissiez obtenir des performances fulgurantes
Pour utiliser Pyinstrument, vous n'avez pas besoin d'écrire un script Python ; appelez simplement Pyinstrument en utilisant directement la ligne de commande. Votre script s'exécutera normalement, et l'outil produira un résumé coloré des zones où l'application a passé son temps. Pyinstrument est également doté d'une API Python qui facilite encore le processus
Vous avez également la possibilité de profiler les requêtes web en Flacon et Django, pour lesquels ils disposent d'une documentation élaborée. Veuillez noter que Pyinstrument propose un profilage statistique qui enregistre la pile d'appels toutes les 1 ms au lieu de suivre chaque appel de fonction effectué par votre programme
C'est un avantage car les profileurs statistiques impliquent moins de frais généraux que les profileurs de traçage. Comme il enregistre l'ensemble de la pile, le suivi des appels de fonction coûteux devient facile. En outre, Pyinstrument masque également (par défaut) les cadres de bibliothèque, ce qui vous permet de vous concentrer sur les applications ou les modules responsables de l'impact sur les performances
Le débogage des problèmes de performance est facilité par le fait que Pyinstrument enregistre le temps passé à l'aide d'une horloge murale. L'outil enregistre le temps passé par le programme à lire des fichiers, à télécharger des données, à communiquer avec une base de données, etc
Xdebug
Pour améliorer les performances de votre code et rendre votre expérience de développement un peu plus amusante, Xdebug offre de nombreuses possibilités de profilage et de débogage
Il s'agit en fait d'une extension PHP qui vous permet de trouver les goulets d'étranglement dans votre application PHP et d'analyser ses performances à l'aide d'outils de visualisation externes pour générer des graphiques de performance
Xdebug crée une sortie détaillée montrant le chemin parcouru par l'application pour atteindre une erreur, y compris les paramètres passés à une fonction donnée. Cela permet de suivre les erreurs. Pour aider le développeur à comprendre clairement les choses, il génère des informations codées en couleur ainsi que des vues structurées
Il est également doté d'un débogueur à distance que vous pouvez utiliser pour connecter Xdebug à un code en cours d'exécution, à un IDE ou à un navigateur afin de voir les points d'arrêt du code et d'exécuter les codes ligne par ligne. Une autre fonctionnalité offerte est la couverture de code qui montre combien le code de votre programme a été exécuté, et il vous aide également avec les tests unitaires
SPX
Simple Profiling eXtension(SPX) est une extension de profilage conçue pour PHP. Elle possède des propriétés uniques qui la distinguent des autres extensions de profilage. Son utilisation est totalement GRATUITE et limitée à votre infrastructure, ce qui signifie qu'il n'y a aucun risque de fuite de données
La simplicité de SPX le rend très facile à utiliser : il vous suffit de définir une ligne de commande ou une variable d'environnement pour profiler un script. Vous pouvez également activer le bouton radio d'une page web pour profiler le script. Ainsi, vous n'avez pas besoin d'instrumenter votre code manuellement
Il prend également en charge un script de ligne de commande en cours d'exécution - Ctrl-C. En outre, ce processus élimine la nécessité d'utiliser un lanceur de ligne de commande ou une extension de navigateur dédiée. SPX prend en charge environ 22 mesures multiples, dont diverses mesures de temps et de mémoire, d'objets, de fichiers en cours d'utilisation, d'entrées/sorties, etc.
Il peut recueillir des données sans quitter le contexte. Son interface web permet de configurer/activer le profilage pour la session de navigateur en cours d'utilisation et répertorie tous les détails et rapports des scripts profilés. L'interface web vous permet de sélectionner un rapport spécifique pour une analyse plus approfondie et propose des visualisations interactives telles que le Flamegraph, le profil plat et la chronologie, qui peuvent s'étendre à des millions d'appels de fonctions
Préfixe
Préfixe de Stackify est un profileur de code léger et facile à installer que de nombreux développeurs apprécient. Il vous aide à éliminer les goulots d'étranglement dans la performance de votre application afin de l'optimiser et d'améliorer l'expérience de l'utilisateur
Les capacités supérieures de traçage et de profilage de Prefix vous permettent de trouver rapidement les exceptions cachées, les requêtes SQL lentes, etc. Il offre à vos développeurs la véritable puissance de l'APM (surveillance des performances de l'application). Pour cela, Prefix valide les performances du code tel qu'il est écrit et vous permet de pousser des codes plus performants à tester
De cette manière, il reçoit moins de tickets de support de la part de la production et aide les responsables du développement à atteindre les objectifs plus rapidement. Découvrez toutes les requêtes peu performantes, les goulets d'étranglement inconnus et les requêtes générées par l'ORM
Vous pouvez également suivre chaque paramètre d'appel SQL, télécharger les durées et afficher les enregistrements concernés. Prefix simplifie également la détection des modèles N 1. Oubliez le tri de tous ces journaux désordonnés ; rassemblez-les pour localiser facilement les problèmes
Prefix vous permet de trouver le contexte d'un journal suspect dans une requête directement et de passer d'un journal à une trace pour le débogage sans effort. Prefix met en lumière les dépendances peu performantes, ce qui est utile pour trouver des exceptions cachées et travailler avec du code hérité ou des sections de framework. Ces dépendances peuvent être des services web, des services tiers, des services de cache, etc.
Prefix fonctionne sur Windows et Mac et prend en charge .Net, Ruby, Java, PHP, Python et Node.js
Scalène
Scalène est un profileur GPU, CPU et mémoire de haute précision et de haute performance pour les programmes basés sur Python. Il offre plusieurs avantages par rapport à d'autres profileurs, tels que des ordres de grandeur plus rapides et des informations plus approfondies
Scalene est incroyablement rapide et utilise l'échantillonnage plutôt que l'instrumentation. Il ne s'appuie même pas sur les fonctions de traçage de Python. En outre, ses frais généraux sont généralement inférieurs à 10-20 %. Cet outil effectue un profilage logiciel au niveau de la ligne et indique les lignes de code responsables du temps d'exécution de votre programme
Ces détails sont plus précieux que ceux du profilage au niveau des fonctions. Scalene sépare le temps passé purement en Python de celui du code natif qui inclut des bibliothèques. Comme la plupart des programmeurs Python n'optimisent pas les performances du code natif, les développeurs peuvent concentrer leurs efforts sur l'optimisation des codes que vous pouvez réellement améliorer
Scalene met en évidence les points chauds en rouge, ce qui vous permet de repérer plus facilement le temps CPU et l'allocation de mémoire et de séparer facilement le temps système pour trouver les problèmes d'entrées/sorties. Scalene peut rapporter le temps GPU, profiler l'utilisation de la mémoire et suivre l'utilisation du CPU. Scalene peut également identifier d'éventuelles fuites de mémoire, établir le profil du volume de copie et générer des profils réduits pour les lignes de code consommant plus de 1 % du CPU
VisualVM
L'outil de dépannage tout-en-un pour Java, VisualVMest conçu pour être utilisé à la fois pour les phases de production et de développement. Il s'agit d'un logiciel visuel qui intègre des fonctionnalités de profilage légères et des outils JDK en ligne de commande
VisualVM surveille les applications qui tournent sous Java 1.4 et les dépanne à l'aide de plusieurs technologies telles que JMX, jvmstat, Attach API et Serviceability Agent. Cet outil répond parfaitement aux différentes exigences des ingénieurs qualité, des administrateurs système et des utilisateurs finaux
Il détecte automatiquement les applications Java exécutées localement et à distance et les répertorie. L'outil vous permet également de définir les programmes manuellement à l'aide de la connexion JMX. Pour chaque processus, il affiche des données d'exécution typiques telles que le PID, les arguments transmis, le JDK d'origine, la classe principale, les drapeaux de la JVM, la version de la JVM, ainsi que les propriétés du système et des arguments
VisualVM surveille l'utilisation de l'unité centrale, le tas, le méta-espace ou la mémoire de génération permanente, les threads en cours d'exécution et les classes chargées dans une application. Il affiche tous les threads en cours d'exécution sur une ligne de temps avec les durées agrégées de sommeil, d'exécution, de stationnement, de surveillance et d'attente
VisualVM permet de réaliser des profils d'instrumentation et d'échantillonnage pour la gestion de la mémoire et les performances de l'application. Il affiche les vidages de threads pour fournir un aperçu rapide des processus. Il affiche et crée également des instantanés .hprof à la demande pour vous aider à découvrir les inefficacités de l'utilisation du tas et à déboguer les fuites de mémoire
En outre, VisualVM peut lire les données de base d'un processus Java bloqué ainsi que son environnement. Vous pouvez analyser vos applications hors ligne ; il peut sauvegarder l'environnement d'exécution et la configuration de l'application avec des vidages de tas, des vidages de threads et des instantanés de profilage que vous pouvez traiter hors ligne à un stade ultérieur
Il fonctionne sous Windows, Linux et Unix
Profiler d'orbite
Visualisez votre application C/C et trouvez rapidement les problèmes de performance à l'aide d'Profiler d'orbite. Il s'agit d'un outil de débogage et d'un profileur autonome qui vise à aider les développeurs à visualiser et à comprendre le flux d'exécution d'une application complexe
Il fournit une vue précise de tout ce qui se passe à l'intérieur de l'application afin que vous puissiez rapidement éliminer les goulots d'étranglement et restaurer la haute performance de votre application
Orbit Profiler peut travailler efficacement sur n'importe quelle application C ou C, à condition qu'il puisse accéder au fichier PDB. Ensuite, il commencera le profilage une fois que vous aurez terminé le téléchargement de son programme. L'outil saute dans le processus cible, se connecte aux fonctions sélectionnées et effectue le profilage
Il peut même travailler sur vos versions optimisées finales ou de livraison. Outre l'instrumentation dynamique, Orbit Profiler offre également des capacités d'échantillonnage "toujours actives", ce qui est rapide, disponible à tout moment et robuste
Il fonctionne sous Windows et Linux
Uber JVM Profiler
Doté de capacités de profilage avancées, Uber JVM Profiler est une autre bonne option pour vos applications basées sur Java
Il propose un agent Java qui collecte plusieurs traces de pile et métriques pour les processus JVM Spark/Hadoop de manière distribuée, par exemple, les métriques mémoire/CPU/IO
L'outil peut tracer les arguments et les méthodes Java sur les codes utilisateur sans les modifier. Vous pouvez également l'utiliser pour tracer la latence d'appel des nœuds de noms HDFS pour chaque application Spark et trouver les problèmes. Il peut même tracer les chemins de fichiers HDFS de l'application Spark pour trouver les fichiers chauds et effectuer des optimisations supplémentaires
Uber JVM Profiler a été créé à l'origine pour profiler les applications Spark qui comprennent généralement de nombreuses machines ou processus pour une application. Ainsi, les utilisateurs peuvent facilement corréler les métriques pour ces machines ou processus
Cependant, l'outil fonctionne comme un agent Java typique, et vous pouvez l'utiliser pour n'importe lequel de vos processus JVM. Ses fonctionnalités sont les suivantes
- Débogage de l'utilisation de la mémoire des exécuteurs d'applications Spark, comme la mémoire de tas java, la mémoire native, la mémoire hors tas, le pool de tampons et le pool de mémoire
- Débogage de l'utilisation du processeur et du temps de collecte des déchets
- Débogage des méthodes de classe java pour leur fréquence et leur temps ou profilage de la durée (Duration Profiling)
- Argument Profiling (débogage et suivi des appels de méthodes de classe java et de la valeur de leurs arguments)
- Profilage de la pile et génération de diagrammes de flamme pour le temps CPU
- Débogage des métriques d'E/S et des métriques des threads de la JVM
Tracy
Tracy est un outil utile pour aider les développeurs à déboguer facilement les programmes PHP. Il dispose d'un design convivial et de fonctionnalités avancées telles que le support CLI, le débogage des appels AJAX, et plus encore
Il permet de trouver et de corriger rapidement les erreurs, de vérifier les variables, d'enregistrer les erreurs, de visualiser la consommation de mémoire et de déterminer le temps d'exécution des requêtes ou des scripts. L'utilisation d'un code couleur et la mise en évidence des problèmes en rouge avec des explications claires vous aident à visualiser facilement les exceptions et les erreurs et à les comprendre
Tracy est doté d'une fonctionnalité de journalisation et d'une fonction d'autodétection de l'environnement. Il stocke les données dans des fichiers journaux et affiche les messages d'erreur du serveur à un visiteur pendant les temps d'arrêt. Tracy peut également s'intégrer à Drupal 7, OpenCart, WordPress, etc.
vprof
vprof est un profileur visuel pour les applications Python. Il fournit des visualisations riches et interactives des différentes caractéristiques de votre programme Python, telles que l'utilisation de la mémoire et le temps d'exécution
Il est disponible sous une licence BSD et supporte Python 3.4 et plus
Conclusion
La performance des applications est un facteur crucial pour répondre aux attentes des utilisateurs finaux. Et si des problèmes de performance surviennent, vous devez être prêt à les diagnostiquer avant qu'ils n'aient un impact sur l'expérience de l'utilisateur final
Par conséquent, continuez à optimiser vos applications et corrigez les problèmes immédiatement pour continuer à fournir des applications ultra-rapides aux utilisateurs à l'aide des outils que j'ai mentionnés dans cet article
Voici un tableau comparatif rapide montrant les profileurs ci-dessus et ce à quoi ils sont principalement utilisés
Nom de l'outil | Langues |
espionne | Python |
Pyroscope | Python, Ruby, Go |
Bubbleprof | Node.js |
Pyinstrument | Python |
Xdebug | PHP |
SPX | PHP |
Préfixe | Python, .NET, Java, Node.js, Ruby, PHP |
Scalène | Python |
VisualVM | Java |
Profiler d'orbite | C, C |
Uber JVM Profiler | Java |
Tracy | PHP |
vprof | Python |