Pourquoi la métrique « Mémoire utilisée » diffère entre les statistiques Go pprof et Docker
Contexte
Dans une application Go exécutée sur Conteneurs Docker, la commande docker stats signale une utilisation de la mémoire augmentant linéairement. Cependant, en utilisant HTTP pprof pour surveiller l'application en cours d'exécution, la valeur runtime.MemStats.sys reste constante. Cet écart soulève des questions sur les fuites de mémoire potentielles.
Groupes de contrôle et mesures de mémoire
Les statistiques Docker récupèrent les statistiques d'utilisation de la mémoire des groupes de contrôle, qui optimisent l'accès à la mémoire pour éviter les faux partages de cacheline. Par conséquent, la métrique usage_in_bytes dans les groupes de contrôle inclut à la fois le cache de page et RES, qui prennent en compte les E/S de fichiers dans le conteneur.
Récupération de mémoire
Lorsque la mémoire d'un conteneur l'utilisation atteint sa limite maximale, il récupère la mémoire inutilisée plutôt que de mettre fin aux processus. Cela explique pourquoi pprof signale une valeur runtime.MemStats.sys constante, tandis que les statistiques de docker montrent une utilisation de la mémoire augmentant linéairement.
Vérification
Pour confirmer ce comportement, ajoutez un limite de mémoire au conteneur à l'aide de la commande docker run ou d'un fichier docker-compose.yml. Notez que lorsque la limite est atteinte, le conteneur récupérera de la mémoire et maintiendra son utilisation en dessous de la limite, comme indiqué dans cgroups dans /sys/fs/cgroup/memory/docker//.
Conclusion
La différence d'utilisation de la mémoire signalée par les statistiques de pprof et de docker provient de l'inclusion de la mémoire d'E/S de fichier dans les statistiques de docker et de la mémoire. la récupération est entreprise par les groupes de contrôle lorsque des limites de mémoire sont imposées. En comprenant ces facteurs, les développeurs peuvent obtenir une image plus précise de la consommation de mémoire de leur conteneur.
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!