• Assurez la sécurité des applications de la bonne manière! Détectez, protégez, surveillez, accélérez et plus encore…
  • Le but de votre application est de bien servir vos utilisateurs finaux.

    Il doit être rapide, réactif, facile à utiliser et fiable, entre autres fonctionnalités souhaitables.

    Mais maintenir votre logiciel d'une manière qui continue de fournir des performances de haut niveau n'est pas si simple.

    Lorsque votre code commence à appeler des fonctions inutiles, se déclenche sur lui-même, détecte des bogues et entre dans des boucles supplémentaires, cela peut entraîner des inefficacités. Votre application peut devenir lente, ne pas répondre ou se comporter de manière irrégulière.

    Et si vous ne résolvez pas ces problèmes, les performances globales de l'application sont affectées.

    Par conséquent, vos clients peuvent être irrités ou arrêter complètement d'utiliser votre application en raison de performances médiocres et vitesse lente. Cela dégrade non seulement votre réputation, mais vous coûte également en termes de revenus et de bénéfices. Par conséquent, votre code doit être analysé, révisé et débogué pour obtenir des performances optimales. Et le moyen le plus rapide de le faire consiste à utiliser un outil de profilage logiciel pour surveiller et déboguer vos codes et éliminer les goulots d'étranglement liés aux performances.

    Dans cet article, vous découvrirez le profilage de logiciels et comment il peut vous aider. Et puis, je vais vous guider à travers certains des meilleurs outils de profilage pour déboguer votre application et optimiser ses performances.

    Qu'est-ce que le profilage de logiciels?

    Le profilage de logiciel est une analyse de code dynamique où le comportement d'un programme est étudié à l'aide des données collectées lors de l'exécution du programme. Il vise à déterminer différentes sections de programme que vous devez optimiser pour augmenter la vitesse et la réactivité de l'application et diminuer 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ée à un programme. Il existe également des profileurs spécifiques disponibles, tels que les profileurs de mémoire.

    Le profilage est généralement effectué en instrumentant le code source du programme. Les profileurs peuvent utiliser différentes techniques de profilage telles que des méthodes instrumentées, basées sur des événements, statistiques ou de simulation.

    Pourquoi le profilage logiciel 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. Ça aide optimiser le la vitesse du programme et, en même temps, assurez-vous qu'il consomme un minimum de ressources.

    En outre, il est fait pour suivre et optimiser l'utilisation du processeur et le temps d'exécution des commandes.

    Par conséquent, le choix du bon outil de profilage logiciel est nécessaire pour vous assurer de pouvoir déboguer les problèmes liés aux performances plus rapide pour améliorer son efficacité et offrir une meilleure expérience à l'utilisateur final. De nombreux profileurs sont également fournis avec des rapports détaillés, des graphiques et des visualisations interactifs qui vous aident à trouver la cause exacte des problèmes, ce qui facilite leur résolution.

    Alors, voici une liste de certains des meilleurs profileurs de logiciels que vous pouvez essayer et dites-nous ce qui a fonctionné le mieux pour vous.

    py-spy

    py-espion est un excellent profileur d'échantillonnage pour Python. Cela vous permet d'avoir un aperçu de toutes les choses sur lesquelles votre application basée sur Python passe du temps.

    Pour cela, vous n'avez pas à modifier vos codes ou à redémarrer complètement le programme. py-spy implique une faible surcharge et est développé dans Rust pour exécuter une plus grande vitesse. Il n'est pas conçu pour fonctionner dans le même processus que celui où votre programme profilé basé sur python s'exécute. Cela implique que py-spy est hautement sûr et sécurisé à utiliser 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 pour créer des fichiers SVG interactifs. Vous pouvez également afficher d'autres options, telles que la modification des taux d'échantillonnage, les extensions C natives pour le profilage, les sous-processus, les ID de thread, etc. Vous pouvez obtenir une vue en direct des fonctions qui se produisent dans vos programmes en utilisant la commande 'top' et afficher la pile d'appels actuelle en utilisant la commande 'dump' pour chaque thread python.

    Il prend en charge toutes les versions de l'interpréteur CPython, telles que 2.3 - 2.7 et 3.3 - 3.8. Vous pouvez installer py-spy depuis PyPI ou GitHub.

    Pyroscope

    Le logiciel de profilage continu open source de Pyroscope vous aide à déboguer tous les problèmes de performances 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 recherchez des documents Ruby ou Go, Pyroscope vous couvre. Même si vous visez dix secondes ou dix mois de données de profilage de logiciels, leur moteur de stockage conçu sur mesure effectue des requêtes rapides.

    Vous n'avez pas à vous soucier de la surcharge ou des performances des applications, car ils utilisent une technologie de profilage d'échantillonnage qui n'affecte pas les performances. Pyroscope stocke vos données de profilage efficacement; par conséquent, il est rentable pour vous même si vous souhaitez stocker différentes données de profilage à partir de diverses applications pendant des années.

    Il fonctionne sur macOS, Linux et Docker, et prend en charge les programmes écrits en Python, Goet Ruby.

    Bubbleprof

    Bubbleprof by Clinic.js fournit une manière nouvelle et unique de profiler votre logiciel écrit en Node.js. Il utilise une interface utilisateur `` à bulles '' qui aide tout le monde, des experts aux débutants, à déterminer le temps asynchrone passé dans votre application.

    Il visualise le fonctionnement de vos processus Node.js en observant ses opérations asynchronisées, en les regroupant, en calculant les délais et en les mappant.

    Bubbleprof détermine les horaires des opérations en examinant la taille des bulles dans un groupe d'opérations spécifique qui peut être votre code, un noyau de nœud ou un module. Il associe également les groupes adjacents pour réduire l'encombrement.

    Pour calculer les délais lorsque l'opération passe d'un groupe à un autre, Bubbleprof mesure la longueur de la flèche qui relie les bulles. En plus de cela, il utilise également 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 comme cause 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 avoir ces performances ultra-rapides.

    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écuterait normalement et l'outil produirait un résumé en couleur des zones où l'application a passé son temps. Il est également livré avec une API Python qui rend le processus encore plus facile.

    Vous avez la possibilité de profiler les demandes Web dans Flacon et Django également, pour lequel ils ont conservé une documentation élaborée. Ici, 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.

    Il est avantageux car les profileurs statistiques impliquent des frais généraux inférieurs par rapport aux profileurs de traçage. Comme il enregistre l'ensemble de la pile, le suivi des appels de fonction coûteux devient sans effort. En plus de cela, Pyinstrument masque également (par défaut) les cadres de la bibliothèque, vous permettant de vous concentrer sur les applications ou les modules responsables d'affecter les performances.

    Le débogage des problèmes de performances est rendu plus facile car Pyinstrument enregistre le temps passé en utilisant l'heure de l'horloge murale. L'outil suit tout le temps du programme pour lire des fichiers, télécharger des données, communiquer avec une base de données, etc.

    Xdebug

    Pour améliorer les problèmes de performances de votre code et rendre votre expérience de développement un peu plus amusante, Xdebug est livré avec des fonctionnalités étendues pour le profilage et le débogage.

    Il s'agit en fait d'une extension PHP qui vous permet de trouver le goulots d'étranglement dans votre PHP application et analyser ses performances à l'aide d'outils de visualisation externes pour générer des graphiques de performances.

    Xdebug crée une sortie détaillée montrant le chemin de l'application pour atteindre une erreur, y compris les paramètres qu'elle a passés à une fonction donnée. Ceci est fait pour suivre les erreurs. Pour aider un développeur à comprendre clairement les choses, il génère des informations codées par couleur ainsi que des vues structurées.

    Il est également livré avec un débogueur distant que vous pouvez utiliser pour connecter Xdebug avec un code en cours d'exécution, un IDE ou un navigateur pour voir les points d'arrêt du code et exécuter les codes ligne par ligne. Une autre fonctionnalité qu'il offre 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

    Extension de profil simple (SPX) est une extension de profilage conçue pour PHP. Il possède des propriétés uniques, ce qui le distingue 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 sur une page Web pour profiler le script. Par conséquent, vous n'avez pas à instrumenter votre code manuellement.

    Il prend également en charge un script de ligne de commande en cours d'exécution - Ctrl-C. En plus de cela, ce processus élimine également le besoin d'utiliser un lanceur de ligne de commande ou une extension de navigateur dédiée. SPX prend en charge plusieurs métriques d'environ 22, y compris diverses heures et métriques de mémoire, objets, fichiers en cours d'utilisation, E / S, etc.

    Il peut collecter des données sans quitter le contexte. Son interface utilisateur Web permet de configurer / activer le profilage pour la session de navigateur actuellement utilisée et répertorie tous les détails et rapports du script profilé. L'interface utilisateur Web vous permet de sélectionner un rapport spécifique pour une analyse plus approfondie et propose des visualisations interactives telles que Flamegraph, profil plat et chronologie qui peuvent s'adapter à des appels de fonction en millions.

    Prefix

    Préfixe by Stackify est un profileur de code léger et facile à installer que de nombreux développeurs adorent. Il vous aide à éliminer les goulots d'étranglement dans les performances de votre application pour l'optimiser et améliorer l'expérience 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 APM (surveillance des performances des applications). 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 du côté de la production et aide les responsables du développement à atteindre les objectifs plus tôt. Découvrez toutes les requêtes sous-performantes, les goulots d'étranglement inconnus et les requêtes générées par ORM.

    Vous pouvez également suivre chaque paramètre d'appel SQL, télécharger les horaires et afficher les enregistrements concernés. Le préfixe simplifie également la détection de motifs 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 directement le contexte d'un journal suspect dans une requête de requête et de passer d'un journal à une trace pour un débogage sans effort. Prefix met en lumière les dépendances peu performantes, ce qui est utile pour rechercher 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 et autres.

    Prefix fonctionne sur Windows et Mac et prend en charge .Net, Ruby, Java, PHP, Python et Node.js.

    Scalene

    Scalene est un profileur de GPU, de CPU et de mémoire haute précision et haute performance pour les programmes basés sur Python. Il offre plusieurs avantages par rapport aux autres profileurs, tels que l'exécution d'ordres de magnitudes plus rapides et la fourniture d'informations plus détaillées.

    Scalene est incroyablement rapide et utilise l'échantillonnage plutôt que l'instrumentation. Il ne s'appuie même pas sur les fonctionnalités de traçage de Python. En plus de cela, sa surcharge est généralement inférieure à 10-20%. Cet outil effectue le profilage du logiciel au niveau de la ligne et pointe vers les lignes de codes responsables du temps d'exécution de votre programme.

    Ces détails sont plus précieux que ceux du profilage au niveau de la fonction. 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'optimiseront 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.

    Il met en évidence les points chauds en rouge qui vous permettent de repérer plus facilement le temps CPU / l'allocation de mémoire et de séparer facilement le temps système pour trouver les problèmes d'E / S. Scalene peut rapporter l'heure du GPU, profiler l'utilisation de la mémoire et suivre l'utilisation du processeur. Scalene peut également identifier d'éventuelles fuites de mémoire, le volume de copie de profil et générer des profils réduits pour les lignes de code consommant plus de 1% du processeur.

    VisualVM

    L'outil de dépannage tout-en-un pour Java, VisualVM, est conçu pour être utilisé à la fois pour les phases de production et de développement. C'est 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 s'exécutent sur Java 1.4+ et les dépanne à l'aide de plusieurs technologies telles que JMX, jvmstat, Attach API et Serviceability Agent. Cet outil est parfaitement adapté 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 à distance et localement et les répertorie. L'outil vous permet également de définir manuellement les programmes à l'aide de la connexion JMX. Pour chaque processus, il affiche des données d'exécution typiques telles que le PID, les arguments passés, le répertoire d'origine JDK, la classe principale, les indicateurs JVM, la version JVM et les propriétés du système et des arguments.

    VisualVM surveille l'utilisation du processeur, le tas et la 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 dans une chronologie avec des temps de mise en veille, d'exécution, de parcage, de surveillance et d'attente agrégés.

    Les profileurs d'instrumentation et d'échantillonnage peuvent être exécutés à l'aide de VisualVM pour la gestion de la mémoire et les performances des applications. Il affiche les vidages de threads pour fournir des informations rapides sur les processus. Il affiche et crée également des instantanés .hprof à la demande pour vous aider à découvrir les inefficacités d'utilisation du tas et à déboguer les fuites de mémoire.

    De plus, VisualVM peut lire les données de base sur un processus Java en panne avec son environnement. Vous pouvez analyser vos applications hors ligne; il peut enregistrer l'environnement d'exécution et la configuration de l'application avec des vidages de tas, des vidages de thread et des instantanés de profilage que vous pouvez traiter hors ligne à un stade ultérieur.

    Cela fonctionne sous Windows, Linux et Unix.

    Orbit Profiler

    Visualisez votre application C / C ++ et trouvez rapidement les problèmes de performances en utilisant Profileur 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 complexe de l'application.

    Il offre une vue précise de tout ce qui se passe dans l'application afin que vous puissiez éliminer rapidement les goulots d'étranglement des performances et restaurer les performances élevées de votre application.

    Orbit Profiler peut fonctionner 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 au processus cible, s'accroche aux fonctions sélectionnées et effectue le profilage.

    Il peut même fonctionner sur vos versions finales ou d'expédition optimisées. Outre l'instrumentation dynamique, Orbit Profiler offre également des capacités d'échantillonnage «toujours actives», qui sont rapides, disponibles à tout moment et robustes.

    Cela fonctionne sous Windows et Linux.

    Uber JVM Profiler

    Doté de capacités de profilage avancées, Profileur JVM Uber est une autre bonne option pour vos applications Java.

    Il offre un agent Java qui collecte plusieurs traces de pile et métriques pour les processus Spark / Hadoop JVM de manière distribuée, par exemple, des métriques mémoire / CPU / IO.

    L'outil peut tracer les arguments et méthodes Java sur les codes utilisateur sans les modifier. Vous pouvez également l'utiliser pour suivre la latence des appels des nœuds de nom HDFS pour toutes les applications Spark et trouver des problèmes. Il peut même suivre les chemins de fichiers HDFS de l'application Spark pour trouver les fichiers chauds et effectuer une optimisation supplémentaire.

    Uber JVM Profiler a été créé à l'origine pour profiler les applications Spark qui incluent généralement de nombreuses machines ou processus pour une application. Par conséquent, les utilisateurs peuvent facilement corréler les métriques pour ces machines ou processus.

    Cependant, l'outil fonctionne comme un agent Java classique et vous pouvez l'utiliser pour n'importe lequel de vos processus JVM. Ses caractéristiques comprennent:

    • Débogage de l'utilisation de la mémoire des exécuteurs d'applications Spark, tels que la mémoire de tas Java, la mémoire native, la mémoire non-tas, le pool de tampons et le pool de mémoire
    • Débogage de l'utilisation du processeur et du temps de nettoyage de la mémoire
    • Débogage des méthodes de classe Java pour leur fréquence et heure ou profil de durée
    • Profilage d'argument (débogage et traçage de l'appel de méthode de classe Java et de sa valeur d'argument)
    • Profilage de pile et génération de Flamegraphs pour le temps CPU
    • Débogage des métriques d'E / S et des métriques de thread JVM

    Tracy

    Tracy est un outil utile pour aider les développeurs à déboguer facilement les programmes PHP. Il a une conception conviviale et des fonctionnalités avancées telles que la prise en charge de la CLI, le débogage des appels AJAX, etc.

    Il peut trouver et corriger rapidement les erreurs, vider les variables, enregistrer les erreurs, visualiser la consommation de mémoire et déterminer le temps d'exécution des requêtes ou des scripts. L'utilisation du 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 livré avec une fonctionnalité de journalisation et une détection automatique 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 pour les différentes caractéristiques de votre programme Python, telles que l'utilisation de la mémoire et la durée d'exécution.

    Il est disponible sous une licence BSD et prend en charge Python 3.4 et supérieur.

    Conclusion

    Les performances des applications sont un facteur crucial pour répondre aux attentes des utilisateurs finaux. Et si des problèmes de performances surviennent, vous devez être prêt à diagnostiquer le problème avant d'avoir un impact sur le expérience de l'utilisateur final.

    Par conséquent, continuez à optimiser vos applications et à résoudre les problèmes immédiatement pour continuer à fournir des performances d'application ultra-rapides aux utilisateurs à l'aide des outils que j'ai mentionnés dans cet article.

    Voici un tableau de comparaison rapide montrant les profileurs ci-dessus et leur utilisation principale.

    Nom Langues
    py-espion Python
    Pyroscope Python, Ruby, Allez
    Bubbleprof Node.js
    Pyinstrument Python
    Xdebug PHP
    SPX PHP
    Préfixe Python, .NET, Java, Node.js, Ruby, PHP
    Scalene Python
    VisualVM Java
    Profileur d'orbite C, C ++
    Profileur JVM Uber Java
    Tracy PHP
    vprof Python