Maison > développement back-end > Golang > Profilage de la mémoire en Go

Profilage de la mémoire en Go

Barbara Streisand
Libérer: 2024-12-25 21:20:10
original
251 Les gens l'ont consulté

Une gestion efficace de la mémoire est essentielle dans les applications Golang, en particulier dans les environnements à haute concurrence, les services de longue durée ou les tâches gourmandes en données. Le profilage de l'utilisation de la mémoire permet de diagnostiquer les problèmes, d'optimiser les performances et d'éviter les erreurs de manque de mémoire (MOO). Ce guide fournit une approche complète du profilage de l'utilisation de la mémoire à partir d'un point de terminaison Go.

Pourquoi le profilage de la mémoire est important

Le profilage de la mémoire identifie une utilisation inefficace de la mémoire, les fuites de mémoire et les allocations excessives dans votre application. Sans profilage approprié, les problèmes de mémoire peuvent entraîner une dégradation des performances, des coûts plus élevés et des temps d'arrêt du service.

Causes courantes d'une utilisation élevée de la mémoire

  1. Fuites de mémoire : rétention de mémoire involontaire due à la non-effacement des structures de données.
  2. Allocations excessives : grandes tranches, cartes ou autres structures de données consommant une mémoire importante.

Configuration du profilage de la mémoire dans Go

Pour profiler l'utilisation de la mémoire dans une application Go, vous pouvez utiliser des outils tels que pprof pour le profilage d'exécution et parca pour le profilage continu. Voici comment configurer et utiliser ces outils efficacement.

Outils de profilage

  1. pprof

    Un outil Go intégré qui fournit le profilage de la mémoire, du processeur, des goroutines et bien plus encore.

    • Documentation
  2. Parka

    Un outil de profilage continu qui fournit des informations en temps réel en collectant des données auprès de pprof.

    • Documentation
  3. Tests de résistance

    Générez une charge pour simuler une utilisation réelle et observez le comportement de la mémoire sous contrainte. Pour notre cas, nous utilisons SoapUI.

Utiliser pprof

Étant donné que pprof est un outil intégré, l'installation n'est pas requise, incluez l'extrait suivant pour activer pprof dans votre application :

import (
    _ "net/http/pprof"
)

func main() {
    go func () {
    log.Print(http.ListenAndServe(":1234", nil))
    }()
}
Copier après la connexion

Cela expose pprof sur le port 1234. Accédez aux données de profilage en visitant http://localhost:1234/debug/pprof/ ou en utilisant des outils comme l'outil go pprof.

Utilisation de parca pour le profilage continu

Pour installer parca, voir https://github.com/parca-dev/parca, après avoir installé avec succès parca, configurez parca.yaml job_name.static_configs.targets et définissez le même numéro de port que pprof (dans cet exemple 1234)

alors vous pouvez exécuter la commande

parca --config-path="parca.yaml"
Copier après la connexion

en cas de succès, vous verrez un message similaire à

level=info name=parca ts=2024-10-30T06:19:44.5149184Z caller=factory.go:53 msg="loading bucket configuration"
level=info name=parca ts=2024-10-30T06:19:44.5159183Z caller=badger.go:54 msg="Set nextTxnTs to 0"
level=info name=parca ts=2024-10-30T06:19:44.517917Z caller=server.go:90 msg="starting server" addr=:7070
Copier après la connexion

addr=:7070 est l'endroit où vous pouvez accéder à l'interface Web de Parca, le numéro de port peut être différent en fonction de la configuration

Si toute la configuration réussit, vous pouvez accéder à Parca sur un navigateur Web

Profiling Memory In Go

Il existe plusieurs types de profilage, que vous pouvez utiliser pour l'utilisation de la mémoire

Profiling Memory In Go

Si vous rencontrez un problème, vous devez consulter la documentation car un environnement différent peut nécessiter une solution différente

  • pprof https://pkg.go.dev/net/http/pprof
  • parca https://github.com/parca-dev/parca

Identifier l'utilisation de la mémoire

Tests de résistance

Avant le profilage, simulez un trafic élevé à l'aide d'outils de tests de stress. Dans notre cas, nous utilisons SoapUI. Les tests de stress aident à reproduire les conditions conduisant à des problèmes de mémoire.

Analyse de l'utilisation de la mémoire

Profiling Memory In Go
Après avoir effectué un test de résistance, surveillez l'utilisation de la mémoire au fil du temps à l'aide du tableau de bord Parca.

Profiling Memory In Go
Cliquez sur les graphiques pour accéder aux profils détaillés.

Profiling Memory In Go
À l’aide du graphique icicle, examinez la pile et l’utilisation de la mémoire correspondante. Des lignes plus larges indiquent une consommation de mémoire plus élevée. Cette visualisation permet d'identifier les processus consommant une quantité importante de mémoire.

Dans notre application, un processus avec une utilisation importante de la mémoire a été identifié :

Profiling Memory In Go

Optimisation de la mémoire

L'optimisation de la mémoire est un sujet complexe qui varie en fonction de l'application et de son environnement. Voici quelques techniques pratiques :

  • Chargement sélectif des données : Chargez uniquement les données nécessaires pour réduire considérablement l'allocation de mémoire.
  • Éviter les pointeurs : utilisez des types de valeur au lieu de pointeurs pour minimiser les allocations de tas.
  • Prédéfinir les longueurs des données : spécifiez les longueurs des structures de données de taille connue afin d'améliorer l'efficacité de la mémoire.

Après une enquête plus approfondie, nous avons découvert que les données récupérées du cache étaient excessivement volumineuses. Nous devions valider si un ensemble de données aussi volumineux était vraiment nécessaire pour notre flux logique.

Dans notre cas, il s'est avéré que ce grand ensemble de données n'était pas nécessaire. Par conséquent, nous avons optimisé le processus en supprimant sélectivement les données inutiles. Après avoir réexécuté les tests, l'utilisation de la mémoire a été réduite d'environ 50 %.

Mise en œuvre précédente

Profiling Memory In Go

Après avoir supprimé sélectivement les données inutiles

Profiling Memory In Go

Avec l'aide de cette méthode, nous pouvons facilement affiner et corriger l'utilisation de la mémoire. Dans notre cas, le Chargement sélectif des données est la méthode correcte pour réduire l'utilisation de la mémoire.


Conclusion

Le profilage de la mémoire est une pratique essentielle pour maintenir les performances et la stabilité des applications Go. En tirant parti d'outils tels que pprof et parca, vous pouvez identifier les problèmes de mémoire, optimiser l'utilisation des ressources et garantir que votre application fonctionne de manière fiable sous diverses charges. Un profilage régulier et une optimisation proactive aident à résoudre efficacement les problèmes liés à la mémoire.

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!

source:dev.to
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal