Table des matières
2. Collectez le profil CPU
3. Vérifiez l'utilisation de la mémoire
4. Bloc de profil et comportement de goroutine
5. Profil hors ligne (pour les outils CLI ou les programmes de courte durée)
Conseils pour un profilage efficace
Maison développement back-end Golang Comment profitez-vous du code GO pour les performances?

Comment profitez-vous du code GO pour les performances?

Aug 05, 2025 am 08:50 AM
go Analyse des performances

L'analyse des performances du code GO peut être implémentée via l'outil PPROF intégré. Tout d'abord, importez le point de terminaison de débogage "net / http / pprof" à activer; 1. Pour les services HTTP, démarrez l'interface PPROF de LocalHost: 6060 dans le programme; 2. Utilisez GO Tool PProf http: // localhost: 6060 / debug / pprof / profil? Seconds = 30 pour collecter 30 secondes de données de performance CPU; 3. Analyser l'allocation de la mémoire via l'outil GO PPROF http: // localhost: 6060 / debug / pprof / tas; 4. Après avoir activé Runtime.SetBlockProfilerate (1) et Runtime.SetMutexProfileFraction (1) peut analyser le blocage de Goroutine et la compétition Mutex; 5. Pour les programmes de cycle de vie de courte durée de vie, utilisez pprof.startcpuprofile et pprof.writeHeApprofile pour la collecte de données de performances hors ligne; Enfin, utilisez les commandes Top, List, Web et autres pour localiser les goulots d'étranglement des performances dans des interfaces ou des visualisations interactives pour terminer la vérification d'optimisation des performances.

Comment profitez-vous du code GO pour les performances?

Le code GO pour les performances du profilage est simple grâce aux outils intégrés de la bibliothèque GO Standard. Le moyen le plus courant et le plus efficace consiste à utiliser le package pprof , qui vous aide à identifier les goulots d'étranglement dans le CPU, la mémoire et le comportement de blocage (affirmation de Goroutine).

Comment profitez-vous du code GO pour les performances?

Voici comment le faire étape par étape:


1. Utilisez net/http/pprof pour les services HTTP

Si votre programme GO est un serveur Web, le moyen le plus simple est d'importer _ "net/http/pprof" . Cela ajoute automatiquement plusieurs points de terminaison de débogage à votre serveur HTTP:

Comment profitez-vous du code GO pour les performances?
 import _ "net / http / pprof"
importer "net / http"

func main () {
    aller func () {
        Log.println (http.ListenandServe ("LocalHost: 6060", nil))
    } ()
    // votre logique d'application principale
}

Une fois en cours d'exécution, visitez http://localhost:6060/debug/pprof/ dans votre navigateur ou utilisez des outils de ligne de commande pour récupérer les profils.


2. Collectez le profil CPU

Pour voir où votre programme passe du temps CPU:

Comment profitez-vous du code GO pour les performances?
 # Exécutez ceci pendant que votre application est sous charge
Go Tool Pprof http: // localhost: 6060 / debug / pprof / profil? Seconds = 30

Cela collecte 30 secondes de données de profilage CPU. Vous entrerez dans un shell pprof interactif.

Commandes communes dans le shell:

  • top - Afficher les fonctions supérieures par utilisation du processeur
  • list <function> - Afficher le timing au niveau de la source pour une fonction
  • web - Générez et ouvrez un graphique d'appel visuel (nécessite graphviz )

Alternativement, enregistrez le profil:

 curl -o cpu.prof http: // localhost: 6060 / debug / pprof / profil? Seconds = 30
Go Tool PPROF CPU.prof

3. Vérifiez l'utilisation de la mémoire

Pour trouver des points chauds d'allocation de mémoire:

 # Profil de tas (utilisation actuelle de la mémoire)
Go Tool Pprof http: // localhost: 6060 / debug / pprof / tas

# Ou enregistrez-le
curl -o mem.prof http: // localhost: 6060 / debug / pprof / tas
Go Tool PProf mem.prof

Commandes utiles:

  • top - Fonctions d'allocation de mémoire supérieures
  • top --unit=MB - Show dans les mégaoctets
  • list <func> - Inspecter une fonction spécifique
  • web alloc_space - visualiser l'allocation cumulative

Vous pouvez également goûter avant la collecte des ordures:

 Go Tool PProf http: // localhost: 6060 / debug / pprof / allocs

4. Bloc de profil et comportement de goroutine

Pour le diagnostic des problèmes de concurrence:

  • Profil de bloc : montre où les goroutines bloquent (par exemple, sur mutexes)

     Go Tool PProf http: // localhost: 6060 / debug / pprof / block
  • Profil de Goroutine : montre tous les goroutines en direct

     Go Tool Pprof http: // localhost: 6060 / debug / pprof / goroutine

Remarque: le profilage de blocs et de mutex doit être activé dans le code:

 Importer "Runtime"

func main () {
    runtime.setblockProfilerate (1) // Activer le profilage du bloc
    runtime.setmutexprofileFraction (1) // Activer le profilage Mutex
    // ...
}

5. Profil hors ligne (pour les outils CLI ou les programmes de courte durée)

Pour les programmes non serveur, utilisez le profilage manuel:

 f, _: = os.create ("cpu.prof")
pprof.startcpuprofile (f)
différer pprof.stopcpuprofile ()

// ... travaillez ...

// pour la mémoire
f, _ = os.create ("mem.prof")
pprof.writeHeApprofile (F)
f.close ()

Ensuite, analysez avec:

 Go Tool PPROF CPU.prof
Go Tool PProf mem.prof

Conseils pour un profilage efficace

  • Exécuter sous une charge réaliste - les profils ne sont utiles que si votre application fait un vrai travail.
  • Réchauffez le programme - en particulier pour la collecte des ordures et le comportement de type JIT dans l'exécution.
  • Comparez avant / après - Assurez-vous que les modifications améliorent réellement les performances.
  • Utilisez go tool pprof -http=:8080 cpu.prof pour ouvrir directement l'interface utilisateur interactive.

Fondamentalement, pprof de GO rend l'analyse des performances accessible et puissante sans outils externes. Il suffit d'ajouter quelques lignes ou d'importer net/http/pprof , générer une charge, collecter des données et explorer. Ce n'est pas magique, mais c'est proche.

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 de ce site Web
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

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1535
276
Comment obtenir l'heure actuelle en Go Comment obtenir l'heure actuelle en Go Aug 06, 2025 am 11:28 AM

UseTime.now () togetTheCurrentLocaltimeAsatime.TimeObject; 2.FormatTheTimeusingtheformatmethodwithlayoutslik "2006-01-0215: 04: 05"; 3.GetUtCtimeByCallingUtc () onTheResultime.now (); 4.xtractconntslikeliseyyar, mois, DayUsiTheThoDs

Comment utiliser l'outil de traçage chrome: // pour une analyse de performance approfondie Comment utiliser l'outil de traçage chrome: // pour une analyse de performance approfondie Aug 06, 2025 am 12:50 AM

Chrome: // Le traçage est l'outil d'analyse des performances de Chrome, utilisé pour trouver des problèmes tels que le décalage de la page et l'occupation élevée des ressources. 1. Open Méthode: Entrez Chrome: // Traçage dans la barre d'adresse, cliquez sur Enregistrer pour démarrer l'enregistrement, et cliquez sur Arrêter pour arrêter l'enregistrement après avoir fonctionné la page. 2. Structure du diagramme de flamme: L'axe horizontal est le temps, l'axe vertical est la pile d'appels et le bloc de couleur indique l'événement long. Les threads de touche incluent le thread principal de rendu, le thread GPU et le thread de processus principal du navigateur. 3. Méthode d'analyse: Vérifiez les situations anormales telles que le fil principal occupé, la disposition de la synchronisation forcée, la collecte fréquente des ordures, les tâches longues, etc., et double-cliquez sur la fonction spécifique pour afficher les détails. 4. Données d'exportation: cliquez sur Enregistrer pour enregistrer le fichier .json,

Comment créer et utiliser des types d'erreur personnalisés dans Go Comment créer et utiliser des types d'erreur personnalisés dans Go Aug 11, 2025 pm 11:08 PM

Dans GO, la création et l'utilisation de types d'erreurs personnalisés peuvent améliorer l'expressivité et la débogabilité de la gestion des erreurs. La réponse est de créer une erreur personnalisée en définissant une structure qui implémente la méthode Error (). Par exemple, ValidationError contient des champs de champ et de messages et renvoie les informations d'erreur formatées. L'erreur peut ensuite être renvoyée dans la fonction, détectant des types d'erreur spécifiques via des assertions ou des erreurs de type. Vous pouvez également ajouter des méthodes comportementales telles que les erreurs ISCRITIQUES à personnalisées, qui conviennent aux scénarios qui nécessitent des données structurées, un traitement différencié, une exportation de bibliothèque ou une intégration API. Dans des cas simples, des erreurs.

Comment transformez-vous une application GO? Comment transformez-vous une application GO? Aug 06, 2025 am 05:52 AM

Cross-compilingaGoapplicationisstraightforwardusingbuilt-insupportviaGOOSandGOARCH.1.SetGOOSforthetargetoperatingsystem(e.g.,linux,windows,darwin).2.SetGOARCHforthetargetarchitecture(e.g.,amd64,arm64).3.Rungobuildwiththesevariables,suchasGOOS=linuxGO

Comment utiliser le chemin / le fil de file pour la manipulation de chemin multiplateforme en go Comment utiliser le chemin / le fil de file pour la manipulation de chemin multiplateforme en go Aug 08, 2025 pm 05:29 PM

UseFilepath.join () tosafelyconstructPathswithcorrectos-spécifications ..2.UseFilePath.clean () toreMoverEdundantelements like ".." et ".". 3.UseFilepath.split () toseParateDirectoryandFileComponents.4.UseFilePath.Dir (), FilePath.base (), an

Comment gérer les paniques et récupérer Comment gérer les paniques et récupérer Aug 06, 2025 pm 02:08 PM

La fonction de récupération doit être appelée en report pour capturer la panique; 2. Utilisez la récupération dans des programmes de longue durée tels que Goroutine ou Server pour empêcher l'ensemble du programme de se bloquer; 3. La récupération ne doit pas être abusée, uniquement utilisée lorsqu'elle est manipulée, pour éviter de remplacer la gestion des erreurs normale; 4. Les meilleures pratiques incluent l'enregistrement des informations de panique, en utilisant Debug.stack () pour obtenir des traces de pile et récupérer à un niveau approprié. La récupération n'est valable que dans le report et doit être utilisée pour le débogage avec des journaux. Les bogues potentiels ne peuvent pas être ignorés. En fin de compte, le code doit être conçu en renvoyant l'erreur plutôt qu'en panique.

Comment gérez-vous les signaux dans une application Go? Comment gérez-vous les signaux dans une application Go? Aug 11, 2025 pm 08:01 PM

La bonne façon de traiter les signaux dans les applications GO consiste à utiliser le package OS / Signal pour surveiller le signal et effectuer un arrêt élégant. 1. Utilisez Signal.Notify pour envoyer SIGINT, SIGTERM et d'autres signaux au canal; 2. Exécutez le service principal en goroutine et bloquez le signal d'attente; 3. Après avoir reçu le signal, effectuez un arrêt élégant avec le délai d'expiration via Context.withTimeout; 4. Nettoyer des ressources telles que la fermeture des connexions de la base de données et l'arrêt de la goroutine d'arrière-plan; 5. Utilisez le signal.Resine pour restaurer le comportement du signal par défaut lorsque cela est nécessaire pour vous assurer que le programme peut être terminé de manière fiable en Kubernetes et dans d'autres environnements.

Comparaison des performances: Java Vs. GO pour les services backend Comparaison des performances: Java Vs. GO pour les services backend Aug 14, 2025 pm 03:32 PM

GOTYPICAL OFFERSBETTERRUNTIMEPERFORMANCE AVEC LA MAINTRÉE DE PUTHROUGHTANDLOWERLATENCE, ENTERTFORI / O-HEAVYSERVICES, DUETOITSLIGHT LONDEGOROUTINESANDERFICENTSCHEDULL

See all articles