Le profiling est une technique qui permet d'observer le comportement d'un programme en exécution afin d'identifier les zones de code qui consomment le plus de ressources.
Il fournit des informations détaillées sur l'utilisation de la CPU, la mémoire, les blocages et les routines.
Utilisation de l'outil "pprof" pour le profiling CPU, mémoire et blocage#
pprof est un outil de profiling inclus dans la standard library de Go. Il permet de visualiser le profil CPU, mémoire, blocage et goroutines de votre programme.
Pour utiliser pprof, importez le package net/http/pprof dans votre code et démarrez un serveur HTTP pour l'exposition des données de profiling.
Utilisez la commande go run pour exécuter votre programme. Par exemple : go run mon_programme.go.
Pendant l'exécution du programme, accédez à http://localhost:8080/debug/pprof/ dans votre navigateur pour voir les profils disponibles.
Pour capturer un profil CPU, accédez à http://localhost:8080/debug/pprof/profile.
Pour capturer un profil de mémoire, accédez à http://localhost:8080/debug/pprof/heap.
Pour capturer un profil de blocage, accédez à http://localhost:8080/debug/pprof/block.
Les résultats de profiling sont représentés sous forme de graphiques ou de tables qui montrent la quantité de temps CPU ou de mémoire consommée par chaque fonction.
Un "graphique d'appels" montre comment les fonctions appellent d'autres fonctions et la quantité de ressources consommées par chaque appel.
Un "graphique en flamme" montre la consommation de ressources sur une échelle de temps, ce qui permet d'identifier les goulots d'étranglement.
Les goulots d'étranglement sont des parties du code qui limitent les performances globales du programme.
Ils peuvent être causés par des algorithmes inefficaces, des structures de données inappropriées, des opérations d'E/S bloquantes, etc.
Les résultats de profiling peuvent aider à identifier ces goulots d'étranglement en montrant où le programme passe le plus de temps ou consomme le plus de ressources.
Techniques d'optimisation, bonnes pratiques et astuces#
Évitez les allocations de mémoire inutiles. Préférez le pooling d'objets ou réutilisez les objets existants lorsque c'est possible.
Préférez les boucles for aux récursions pour éviter la surcharge de la pile.
Utilisez des structures de données appropriées pour vos besoins. Par exemple, utilisez une map pour la recherche rapide d'éléments, utilisez une liste liée pour les insertions et suppressions fréquentes, etc.
Utilisez la concurrence lorsque c'est approprié. Go fournit des goroutines et des canaux pour faciliter la programmation concurrente.
Préférez les opérations d'E/S non bloquantes pour éviter que votre programme ne soit bloqué en attendant les E/S.
Après avoir apporté des modifications pour optimiser votre code, utilisez à nouveau pprof pour capturer un nouveau profil et comparez-le avec le profil original.
Les améliorations devraient se traduire par une réduction du temps CPU, de la mémoire ou du blocage dans les parties du code que vous avez optimisées.
N'oubliez pas que l'optimisation prématurée est la racine de tous les maux en programmation. Il est préférable de d'abord écrire un code clair et correct, puis de l'optimiser si nécessaire en se basant sur les données de profiling.