Maison  >  Article  >  développement back-end  >  Comment utiliser le langage Go pour l'analyse des performances du code

Comment utiliser le langage Go pour l'analyse des performances du code

王林
王林original
2023-08-02 18:28:511407parcourir

Comment utiliser le langage Go pour l'analyse des performances du code

Introduction :
Pendant le processus de développement, nous devons souvent effectuer une analyse des performances sur le code que nous écrivons pour détecter d'éventuels problèmes et goulots d'étranglement. En tant que langage de programmation hautes performances, le langage Go fournit des outils puissants pour nous aider à analyser les performances du code. Cet article explique comment utiliser le langage Go pour l'analyse des performances du code et fournit des exemples de code pour aider les lecteurs à mieux comprendre.

1. Utiliser des benchmarks pour les tests de performances
En langage Go, nous pouvons utiliser des benchmarks pour tester les performances du code. Benchmark est une fonction de test spéciale, qui porte le préfixe Benchmark et possède un paramètre de type *testing.B. Examinons ensuite un exemple de code simple :

package main

import (
    "testing"
)
  
func sum(a, b int) int {
    return a + b
}
  
func BenchmarkSum(b *testing.B) {
    for i := 0; i < b.N; i++ {
        sum(1, 2)
    }
}

Dans l'exemple ci-dessus, nous avons défini une fonction appelée sum, qui est utilisée pour calculer la somme de deux entiers. Ensuite, nous avons défini une fonction de test appelée BenchmarkSum, qui est utilisée pour tester les performances de la fonction somme. Dans la fonction BenchmarkSum, nous utilisons une boucle for pour exécuter à plusieurs reprises la fonction sum afin de mesurer ses performances. Lors de l'exécution du test, nous pouvons utiliser la commande go test pour exécuter cette fonction de test, comme indiqué ci-dessous :

$ go test -bench .

Après avoir exécuté la commande ci-dessus, le langage Go exécutera automatiquement notre fonction BenchmarkSum et affichera les résultats de performances correspondants. Parmi eux, le paramètre -bench est utilisé pour spécifier la fonction de test à exécuter.

2. Utilisez pprof de la bibliothèque standard pour l'analyse des performances
La bibliothèque standard du langage Go fournit un package pprof qui peut être utilisé pour l'analyse des performances. Nous pouvons utiliser ce package pour vérifier l'utilisation du processeur, l'utilisation de la mémoire, l'utilisation des goroutines, etc. d'un morceau de code. Voici un exemple de code simple :

package main

import (
    "net/http"
    _ "net/http/pprof"
)

func main() {
    //注册pprof的http服务
    go func() {
        http.ListenAndServe("localhost:6060", nil)
    }()

    //你的代码逻辑

    //...
}

Dans l'exemple ci-dessus, nous avons importé le package net/http/pprof de manière anonyme et enregistré un service http pprof à l'aide de la fonction http.ListenAndServe dans la fonction principale. Lors de l'exécution de notre programme, nous pouvons visiter http://localhost:6060/debug/pprof/ dans le navigateur pour afficher les résultats de l'analyse des performances correspondants. Parmi eux, différents chemins correspondent à différents indicateurs d'analyse de performances, comme suit :

  • /debug/pprof/heap : Affiche un aperçu de l'allocation de mémoire du tas.
  • /debug/pprof/goroutine : Affiche les traces de pile de toutes les goroutines en cours d'exécution.
  • /debug/pprof/block : affiche la trace de pile qui a provoqué le blocage.
  • /debug/pprof/threadcreate : Affiche la trace des threads créés.
  • /debug/pprof/cmdline : Représente les paramètres de ligne de commande pour l'exécution du programme.
  • /debug/pprof/profile : représente les informations de configuration du processeur.
  • /debug/pprof/trace : représente les informations de configuration de traçage.

Il convient de noter que lors de l'utilisation de pprof pour l'analyse des performances, nous devons nous assurer qu'un Goroutine supplémentaire est ouvert pour exécuter le service http de pprof, sinon nous ne pourrons pas accéder aux résultats de l'analyse des performances correspondants via le navigateur.

3. Utiliser des outils tiers pour l'analyse des performances
En plus des outils fournis par la bibliothèque standard, il existe également d'excellents outils tiers disponibles. Par exemple, go-torch est un outil permettant de visualiser le profil CPU des programmes Go. Il peut générer des graphiques de flamme pour afficher les fonctions chaudes dans le code. Voici un exemple de code simple pour montrer comment utiliser l'outil go-torch : go-torch是一个用于可视化Go程序CPU profile的工具,它能够生成火焰图来显示代码中的热点函数。下面是一个简单的示例代码来演示如何使用go-torch工具:

$ go get github.com/uber/go-torch

$ go test -bench . -benchmem -cpuprofile=cpu.prof

$ go-torch --binaryname=test.test cpu.prof

在上面的示例中,我们首先使用go get命令来安装go-torch工具。然后,我们运行go test命令来生成CPU profile文件,并使用go-torch命令来生成火焰图。最终,我们可以在浏览器中打开生成的torch.svgrrreee

Dans l'exemple ci-dessus, nous utilisons d'abord la commande go get pour installer outil go-torch. Ensuite, nous exécutons la commande go test pour générer le fichier de profil CPU et la commande go-torch pour générer le graphique de flamme. Enfin, nous pouvons ouvrir le fichier torch.svg généré dans le navigateur pour afficher le graphique de flamme et effectuer une analyse des performances.


Conclusion :

Cet article présente comment utiliser le langage Go pour l'analyse des performances du code et donne des exemples de code pratiques. En utilisant les tests de performances du langage Go, pprof et certains outils tiers, nous pouvons mieux comprendre les performances de notre code en termes de performances, identifiant ainsi les problèmes et goulots d'étranglement possibles et prenant les mesures d'optimisation correspondantes. J'espère que cet article vous sera utile, merci d'avoir lu ! 🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn