Optimiser le garbage collection Go en environnement conteneurisé

jerome38 10/05/2026
RÉSOLU
jerome38
Auteur
Avatar de jerome38
jerome38
Auteur

Salut à tous, je galère avec des spikes de latence sur un microservice Go tournant dans Kubernetes. Malgré des limites mémoire bien définies, on observe des pauses GC significatives dès que la heap dépasse 2Go. J'ai essayé de jouer avec GOGC mais ça ne stabilise pas assez le throughput.

Est-ce que quelqu'un a déjà réussi à tuner finement le runtime pour des applications à haute fréquence de requêtes sans sacrifier la mémoire disponible ?

10/05/2026 à 09:00

6 commentaires

lmarion
Membre
Avatar de lmarion
lmarion
Membre

Le problème avec GOGC, c'est que c'est un pourcentage global. Si ton service alloue massivement des petits objets, tu vas déclencher le GC trop souvent. As-tu essayé de passer à GOMEMLIMIT au lieu de GOGC ?

11/05/2026 à 06:47
jerome38
Auteur
Avatar de jerome38
jerome38
Auteur

J'ai mis GOMEMLIMIT à 80% de la limite du pod, mais ça semble juste déclencher des cycles plus agressifs, ce qui augmente le CPU wait.

11/05/2026 à 20:33

Regarde du côté des sync.Pool pour réutiliser tes buffers. Si tu alloues trop de slices temporaires, le GC va passer sa vie à nettoyer. Voici un exemple rapide :

var bufferPool = sync.Pool{
  New: func() interface{} {
    return new(bytes.Buffer)
  },
}
12/05/2026 à 16:04
jerome38
Auteur
Avatar de jerome38
jerome38
Auteur

J'utilise déjà des pools pour les gros objets, mais c'est peut-être insuffisant pour les allocations mineures. Je vais profiler avec pprof pour voir ce qui s'accumule.

13/05/2026 à 07:19
astrid94
Membre
Avatar de astrid94
astrid94
Membre

Attention aussi au debug.SetGCPercent. Si tu as une application très sensible, parfois désactiver le GC dynamiquement sur certaines routes critiques aide, mais c'est très risqué.

14/05/2026 à 01:50
jerome38
Auteur
Avatar de jerome38
jerome38
Auteur

Merci pour les pistes, je vais regarder les allocations en pprof et tenter de réduire la pression sur l'allocateur avant de toucher au runtime.

14/05/2026 à 21:04

Laisser une réponse

Vous devez être connecté pour poster un message !

Rejoindre la communauté

Recevoir les derniers articles gratuitement en créant un compte !

S'inscrire