Améliorez les performances de vos programmes Go en utilisant la technique de profilage.

Le profilage est une technique couramment utilisée dans le cycle de développement logiciel pour analyser les performances d'un programme, généralement pour une comparaison entre les programmes ou pour identifier les goulots d'étranglement et les domaines d'amélioration pour un programme. Le profilage implique la mesure et l'analyse de diverses métriques telles que l'utilisation de la mémoire, l'utilisation du processeur, le temps d'exécution et d'autres statistiques au niveau du système.

Le profilage vise à identifier les parties d'un programme consommant le plus de ressources afin qu'il puisse être optimisé pour de meilleures performances. Le profilage peut également aider au débogage, à l'optimisation de la gestion de la mémoire et au réglage de la concurrence.

Profilage en Go

Il existe de nombreux outils de profilage dans Go. Certains outils populaires incluent l'outil de profilage pprof intégré de Go et des packages tiers populaires tels que les packages Go Tool Trace et Go-Torch.

Le pprof le paquet fait partie du Durée emballer. Le pprof fournit des fonctionnalités pour écrire des données de profilage d'exécution dans des formats que le pprof outil de visualisation peut interpréter.

Voici comment vous pouvez importer le pprof package dans vos programmes Go :

importer"pprof"

Go fournit plusieurs commandes et drapeaux pour travailler avec le code source. Exécutez ce qui suit outil commande pour accéder aux résultats de profilage dans différents formats.

aller outil pprof

La commande affiche les détails d'utilisation sur le pprof commande.

Profilage du processeur dans Go

Le profilage CPU mesure le temps qu'un programme passe à exécuter des fonctions. Le profilage CPU est utile pour identifier les parties de code qui consomment le plus de temps CPU.

Le pprof fournit des fonctions pour collecter des profils de CPU, démarrer et arrêter le profilage de CPU et une fonction pour écrire des données de profil dans des fichiers.

Voici comment démarrer et arrêter un profil CPU et écrire les données dans un fichier de profilage :

importer (
"os"
« runtime/pprof »
)

fonctionprincipal() {
f, erreur := os. Créer("profil_cpu.prof")
si erreur != néant {
panique(se tromper)
}
reporter F. Fermer()

erreur = pprof. StartCPUProfile (f)
si erreur != néant {
panique(se tromper)
}
reporter pprof. ArrêterProfilCPU()

// code à profiler
}

Le principal La fonction crée un fichier et ferme le flux de fichiers avec un reporter déclaration et la Fermer fonction de l'instance de fichier. Le StartCPUProfile La fonction démarre un profil CPU et écrit les données dans le fichier, et la StopCPUProfile ferme le flux de profil avec un reporter déclaration. Après avoir démarré et arrêté le profil CPU, vous pouvez procéder à l'écriture du code que vous souhaitez analyser.

Voici le résultat de l'exécution du pprof commande avec le fichier de profil du programme :

Exécution de la pprof La commande avec un fichier démarre un shell interactif qui vous permet d'explorer les données de profilage. Vous pouvez utiliser des commandes comme haut et liste pour voir les fonctions qui prennent le plus de temps à s'exécuter.

Profilage de la mémoire dans Go

Le profilage de la mémoire est une technique utilisée pour identifier les fuites de mémoire et l'utilisation coûteuse de la mémoire dans le code en mesurant l'utilisation de la mémoire des fonctions dans le code.

Vous pouvez démarrer un profil de mémoire avec le WriteHeapProfile fonction. Le WriteHeapProfile La fonction prend une instance de fichier et écrit les données de profil dans le fichier.

importer (
"os"
« runtime/pprof »
)

fonctionprincipal() {
f, erreur := os. Créer("mem_profil.prof")
si erreur != néant {
panique(se tromper)
}
reporter F. Fermer()

erreur = pprof. WriteHeapProfile (f)
si erreur != néant {
panique(se tromper)
}

// code à profiler
}

Le principal la fonction crée un fichier de profilage, et la WriteHeapProfile La fonction prend l'instance de fichier comme argument et renvoie un type d'erreur d'écriture après avoir écrit dans le fichier. Vous pouvez en outre gérer l'erreur en fonction de vos besoins.

Bloquer le profilage avec Go

Le profilage de bloc mesure le temps d'attente d'un programme pour les primitives de synchronisation, telles que les mutex et les canaux. Le profilage de bloc est utile pour identifier les parties du code susceptibles de provoquer un blocage.

Le Chercher renvoie le profil avec le nom d'une chaîne spécifiée, et la Écrire à fonction de la Chercher La fonction écrit un instantané au format pprof du profil dans le fichier.

Voici comment implémenter le profilage de blocs pour vos programmes Go :

importer (
"os"
« runtime/pprof »
)

fonctionprincipal() {
f, erreur := os. Créer("block_profile.prof")
si erreur != néant {
panique(se tromper)
}
reporter F. Fermer()

erreur = pprof. Chercher("bloc").WriteTo (f, 0)
si erreur != néant {
panique(se tromper)
}

// code à profiler
}

Le programme crée un fichier pour stocker les données de profil de bloc, recherche les blocs avec le Chercher fonction et écrit les données de profil de bloc dans le fichier.

Tracer le profilage avec Go

Le profilage de trace est une technique permettant de mesurer l'exécution d'un programme, y compris la planification de goroutine et les appels système. Le profilage de trace est utile pour identifier les goulots d'étranglement des performances et comprendre les interactions entre les différentes parties du programme.

Le trace package fournit des fonctions pour le profilage de trace. Ce forfait fait également partie du Durée emballer.

importer (
"os"
"exécution/trace"
)

fonctionprincipal() {
f, erreur := os. Créer("tracer")
si erreur != néant {
panique(se tromper)
}
reporter F. Fermer()

erreur = trace. Début (f)
si erreur != néant {
panique(se tromper)
}
reporter trace. Arrêt()

// code à profiler
}

Le programme crée un fichier de trace pour stocker les données de trace, démarre le traceur avec le Commencer fonction qui prend l'instance de fichier et renvoie un type d'erreur, et diffère le traceur avec le Arrêt fonction.

Go fournit également des outils pour formater le code source. Parallèlement aux outils de profilage, vous pouvez utiliser les outils de formatage pour maintenir les normes de code. Le Gofmt tool est un outil de formatage intégré que vous pouvez utiliser pour formater votre code source Go en fonction de règles spécifiées pour vos packages.