Profilage du tas et des allocations
Repérer les points chauds de la mémoire avec des profils du tas
Profilage du tas et des allocations est une leçon Go Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Go Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Go Academy comprend 4 leçons au total.
Pourquoi profiler le tas ?
Des allocations mémoire excessives ralentissent les programmes Go en augmentant la pression exercée sur le ramasse-miettes. Le profilage du tas montre quels chemins d’exécution allouent le plus de mémoire, afin de vous permettre de réduire les allocations.
Capturer un profil du tas
Via le point d’accès HTTP (net/http/pprof est requis) :
go tool pprof http://localhost:6060/debug/pprof/heapProfil du tas basé sur un fichier
Écrivez un profil du tas à n’importe quel moment à l’aide de runtime/pprof :
f, _ := os.Create("mem.prof")
pprof.WriteHeapProfile(f)
f.Close()Inuse et alloc
Le profil du tas propose deux vues : inuse_objects/inuse_space (objets et espace actuellement utilisés) et alloc_objects/alloc_space (total depuis le démarrage). Utilisez alloc_space pour trouver les chemins d’allocation les plus sollicités.
go tool pprof -alloc_space http://localhost:6060/debug/pprof/heapgo test -memprofile
Capturez le profil mémoire pendant les mesures de performances :
go test -memprofile mem.prof -benchmem -bench=BenchmarkProcess ./...MemStats
Lisez par programme les statistiques de mémoire du moteur d’exécution pour assurer une surveillance en temps réel :
var ms runtime.MemStats
runtime.ReadMemStats(&ms)
fmt.Printf("Alloc: %v MiB\n", ms.Alloc/1024/1024)
fmt.Printf("NumGC: %v\n", ms.NumGC)Analyse d’échappement
Les variables qui s’échappent vers le tas provoquent des allocations. Exécutez go build -gcflags=-m pour voir quelles variables s’échappent et pourquoi.
go build -gcflags="-m -m" ./...
// main.go:12:15: &User{...} escapes to heapRéduire les allocations : préallouer
Préallouez les tranches avec make([]T, 0, n) lorsque la longueur finale est connue, afin d’éviter les réallocations répétées à mesure que la tranche grandit.
results := make([]Result, 0, len(input))sync.Pool pour la réutilisation
Mettez en réserve les objets réutilisables (tampons, tranches de travail) avec sync.Pool afin d’amortir le coût des allocations :
var pool = sync.Pool{
New: func() any { return new(bytes.Buffer) },
}
buf := pool.Get().(*bytes.Buffer)
buf.Reset()
// use buf...
pool.Put(buf)Récepteurs par valeur et par pointeur
Les grandes structures transmises par valeur sont copiées à chaque appel. Transmettez-les par pointeur pour éviter la copie, mais gardez à l’esprit que les pointeurs peuvent entraîner l’échappement de la valeur vers le tas.
String et []byte
La conversion entre une chaîne et []byte provoque une allocation. Utilisez []byte dans les chemins d’exécution très sollicités et convertissez en chaîne uniquement à la limite où une chaîne est requise.
Vérification rapide
Que montre -alloc_space dans un profil du tas pprof ?
Récapitulatif : profilage du tas
Points clés :
- -alloc_space affiche le total des allocations ; inuse_space affiche les allocations encore actives
- go build -gcflags=-m affiche l’analyse d’échappement
- Préallouez les tranches ; utilisez sync.Pool pour les réutilisations fréquentes
- runtime.ReadMemStats pour la surveillance par programme
Questions Fréquemment Posées
La leçon « Profilage du tas et des allocations » est-elle gratuite ?
Oui — le texte complet de « Profilage du tas et des allocations » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Go Academy, passe à CoddyKit PRO. Le cours Go Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Profilage du tas et des allocations » ?
Repérer les points chauds de la mémoire avec des profils du tas Tu pratiques Go Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Go Academy ?
Aucune expérience préalable n'est requise. Go Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.
Combien de temps prend la leçon « Profilage du tas et des allocations » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Go Academy ?
Oui. Chaque leçon Go Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Écrire des benchmarks avec testing.B
- Profilage du CPU avec pprof
- Profilage du tas et des allocations
- Traçage de l’exécution