Ich führe eine Python-Anwendung in einem Docker-Container aus. Es lädt regelmäßig einige Daten mithilfe eines Pandas-Datenrahmens. Ungefähr einmal im Monat stürzt der Container mit der Fehlermeldung „Nicht genügend Speicher“ ab.
Ich bin mir nicht sicher, ob das an einem Speicherleck liegt, das nach und nach den Systemspeicher aufsaugt, bis der Container endgültig ist getötet wurde oder wenn das Verhalten eher zufällig ist, so dass es gelegentlich ausgeführt wird und erheblich mehr Speicher als gewöhnlich verbraucht.
Ich habe nicht bemerkt, dass die Systemspeicherauslastung im Laufe des Monats zunehmend höher wird lässt mich denken, dass das Problem wahrscheinlich eher Letzteres und nicht eine allmähliche Erinnerung ist Leck.
Ich dachte, ich könnte Netdata verwenden, um die Speichernutzung des Containers zu überwachen.
Hinweis: Es gibt zwei Möglichkeiten könnte Netdata zum Überwachen von Docker-Containern verwenden:
- Der typische Weg wäre, Netdata zum Überwachen von Containern zu verwenden, indem es auf dem Container-Host ausgeführt wird. Der Host ist in diesem Fall ein Debian 12-System. Die über apt verfügbare Version von Netdata ist v1.37.1. Dies scheint ziemlich veraltet zu sein, da es sich bei der aktuellen Version um Version 2 handelt ... Ich kann in der Web-Benutzeroberfläche nichts sehen, was wie ein Diagramm aussieht, das die Speichernutzung von Docker-Containern überwacht. Daher vermute ich, dass meine Version zu alt ist.
- Der „seltsame“ und überhaupt nicht empfohlene Weg, den ich versuche, besteht darin, Netdata im Ziel-Docker-Container selbst zu installieren .
Die Container CMD ist immer noch auf „CMD [.venv/bin/python3“, „myPythonApp.py“] eingestellt.
Wenn ich den Container starte, ist Netdata (wenig überraschend) ) läuft nicht. Ich kann es manuell starten, indem ich
ausführe
Code: Select all
docker exec -it MY_CONTAINER_NAME bash
/usr/sbin/netdata -D
Auch wenn ich es auf diese Weise starte, wenn ich mich mit den Netdata verbinde Wenn ich eine Instanz im Container ausführe, stelle ich fest, dass sie nur ein einziges Diagramm hat, das zur Messung von Jitter dient.
Diagramme zum Speicher fehlen.
Zusammenfassend:
- Was ich hier versuche, ist wirklich nicht der richtige Ansatz
- Dennoch lässt es sich vielleicht umsetzen, auch wenn es ein kleiner Hack ist
Obwohl es mir gelungen ist, Netdata in einem Docker-Container zu installieren, weiß ich nicht, wie ich es starten soll, da der Container kein systemctl hat. Gibt es eine Möglichkeit, den Netdata-Prozess beim Start des Containers zu starten? Wenn ja, wie soll das gemacht werden? - Wenn ich netdata manuell starte, stelle ich fest, dass es keine der üblichen erwarteten Diagramme gibt, und am wichtigsten ist, dass es keine Diagramme zur Überwachung der Speichernutzung gibt . Dies deutet darauf hin, dass einige Abhängigkeiten fehlen, die Containerprozesse sollten jedoch Zugriff auf die Datei /proc/meminfo haben. (Ich habe überprüft, ob diese Datei vorhanden ist.)