Maison > développement back-end > Golang > Pourquoi la version 1.3 ne libère-t-elle pas la mémoire du serveur dans le système après un pic de connexion ?

Pourquoi la version 1.3 ne libère-t-elle pas la mémoire du serveur dans le système après un pic de connexion ?

Susan Sarandon
Libérer: 2024-12-30 06:38:09
original
280 Les gens l'ont consulté

Why Doesn't Go 1.3 Release Server Memory Back to the System After a Connection Spike?

Le garbage collector Go 1.3 ne libère pas la mémoire du serveur vers le système

Un serveur développé pour examiner l'empreinte mémoire montre une mémoire RES fluctuante malgré la libération de mémoire attendue après un pic de connexions. Le problème survient en raison des limitations du garbage collector Go à libérer immédiatement la mémoire tas et de l'inaccessibilité de la mémoire de la pile goroutine au système d'exploitation. Un appel système disponible dans les systèmes de type Unix pour libérer les parties de tas inutilisées n'est pas disponible sous Windows, ce qui entraîne une consommation de mémoire virtuelle potentiellement plus importante.

Au départ, le serveur démarre avec une empreinte mémoire mineure. Au cours de l'impulsion initiale de 10 000 connexions, l'utilisation de la mémoire s'élève à environ 60 Mo (comme l'indique la taille RES en « haut »). Lorsque l'impulsion se termine, l'utilisation de la mémoire diminue. Cependant, la taille RES reste élevée à 56 Mo, tandis que la mémoire en cours d'utilisation ne descend jamais en dessous de 60 Mo.

Bien que le garbage collector Go libère de la mémoire tas, il ne la renvoie pas immédiatement au système. Ce processus peut prendre jusqu'à sept minutes après le balayage GC. De plus, la mémoire allouée aux piles goroutines n'est jamais libérée sur le système d'exploitation. Cela contribue à la consommation élevée et persistante de mémoire observée sur le serveur.

Malheureusement, il n'existe pas de solution claire à ce problème dans la version 1.3 de Go. Cependant, la situation devrait s'améliorer dans les versions ultérieures. Pour atténuer l'impact, envisagez les mesures suivantes :

  • Forcer périodiquement le garbage collection à l'aide de runtime.GC().
  • Définissez une limite sur le nombre de connexions que le serveur peut accepter pour empêcher utilisation excessive de 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:php.cn
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