
Ich habe einen Sidecar-Container mit den folgenden Ressourcen:
resources:
limits:
memory: 512Mi
requests:
memory: 64Mi
Beim Ausführen wird jedoch top
Folgendes angezeigt:
- Envoy und Pilot-Agent scheinen jeweils ca. 363 MB und 61 MB zu verwenden
- Der verwendete Speicher oben beträgt 54,6 MB
- Das Ausführen
free -m
ergibt das Folgende; eine scheinbar unkorrelierte Antwort
$ free -m
total used free shared buff/cache available
Mem: 385307 47140 315018 292 23148 336021
Swap: 0 0 0
Was genau passiert hier und wie viel Speicher verbrauchen diese Prozesse?
Antwort1
Diese freie und Top-Ausgabe zeigt eine Nutzung von etwa 50.000 MiB bei einem Host mit insgesamt etwa 385.000 MiB Speicher.
Container teilen sich einen Kernel, sodass Hostmetriken im Allgemeinen knotenweite Zahlen anzeigen. Auch wenn Namespaces nur Ihre Prozesse und Dateien anzeigen. Dies unterscheidet sich von einer dedizierten VM oder einem physischen Host, bei dem das Betriebssystem nur zur Unterstützung Ihrer Anwendung vorhanden ist.
Um die Anzahl pro Container zu ermitteln, müssen die Cgroup-Nummern abgefragt werden. Auf Stack Overflow finden Sie einige Möglichkeiten dazu:Überprüfen der CPU und des Speichers des Kubernetes-Pods. Viele davon erfordern einen Metrikserver.
Seien Sie vorsichtig, wenn Sie den residenten Speicher von Prozessen addieren und erwarten, dass dies der genaue Speicherverbrauch des Systems ist. Gemeinsam genutzter Speicher oder Caches sind hier nicht enthalten. Und der Kernel macht seltsame Abrechnungstricks mit dem Speicher. Ihre 3 signifikanten Ziffern sind die richtige Idee. Obwohl es im einfachen Fall einer kleinen Anzahl von Prozessen, die hauptsächlich privaten Speicher verwenden, eine gute Schätzung ist.