Warum sich die Metrik „Genutzter Speicher“ zwischen Go pprof und Docker Stats unterscheidet
Kontext
In einer Go-Anwendung, die ausgeführt wird Bei Docker-Containern meldet der Befehl docker stats eine linear steigende Speichernutzung. Wenn Sie jedoch HTTP pprof zur Überwachung der laufenden Anwendung verwenden, bleibt der runtime.MemStats.sys-Wert konstant. Diese Diskrepanz wirft Fragen zu möglichen Speicherlecks auf.
Cgroups und Speichermetriken
Docker Stats ruft Speichernutzungsstatistiken von Cgroups ab, die den Speicherzugriff optimieren, um eine falsche Cacheline-Freigabe zu vermeiden. Folglich umfasst die Metrik „usage_in_bytes“ in cgroups sowohl den Seiten-Cache als auch den RES, die Datei-E/A innerhalb des Containers berücksichtigen.
Speicherrückgewinnung
Wenn der Speicher eines Containers Wenn die Nutzung ihr maximales Limit erreicht, wird ungenutzter Speicher freigegeben, anstatt Prozesse zu beenden. Dies erklärt, warum pprof einen konstanten runtime.MemStats.sys-Wert meldet, während Docker-Statistiken eine linear steigende Speichernutzung anzeigen.
Überprüfung
Um dieses Verhalten zu bestätigen, fügen Sie a hinzu Sie können die Speicherbeschränkung für den Container entweder mit dem Befehl „docker run“ oder einer Datei „docker-compose.yml“ festlegen. Beachten Sie, dass der Container bei Erreichen des Limits Speicher zurückfordert und seine Nutzung unter dem Limit hält, wie in cgroups unter /sys/fs/cgroup/memory/docker// angegeben.
Fazit
Der von pprof und den Docker-Statistiken gemeldete Unterschied in der Speichernutzung ergibt sich aus der Einbeziehung des Datei-E/A-Speichers in die Docker-Statistiken und die von cgroups durchgeführte Speicherrückgewinnung, wenn Speicherbeschränkungen auferlegt werden. Durch das Verständnis dieser Faktoren können Entwickler ein genaueres Bild vom Speicherverbrauch ihres Containers erhalten.
Das obige ist der detaillierte Inhalt vonWarum zeigen Go pprof- und Docker-Statistiken unterschiedliche Speichernutzungsmetriken an?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!