Ich habe einen Docker-Container, der auf einem Host mit 1 G RAM ausgeführt wird (es gibt auch andere Container, die auf demselben Host ausgeführt werden). Die Anwendung in diesem Docker-Container dekodiert einige Bilder, die möglicherweise viel Speicherplatz beanspruchen.
Von Zeit zu Zeit wird dieser Container verlassen. Ich bezweifle, dass es an zu wenig Gedächtnis liegt, aber nicht sehr sicher. Ich brauche eine Methode, um die Grundursache zu finden. Gibt es also eine Möglichkeit zu wissen, was für den Tod dieses Containers passiert ist?
docker
containers
exit
Li Bin
quelle
quelle
docker logs <container-id>
.Antworten:
Andere haben erwähnt
docker logs $container_id
, um die Ausgabe der Anwendung anzuzeigen. Dies wäre immer mein erstes zu überprüfen.Als Nächstes können Sie a ausführen
docker inspect $container_id
, um Details zum Status anzuzeigen, z.Die wichtige Zeile dort ist "OOMKilled". Dies gilt, wenn Sie die Container-Speicherbeschränkungen überschreiten und Docker Ihre App beendet. Möglicherweise möchten Sie auch den Exit-Code nachschlagen, um festzustellen, ob Ihre App eine Ursache für den Exit identifiziert.
Beachten Sie, dass dies nur anzeigt, ob Docker selbst Ihren Prozess beendet und dass Sie ein Speicherlimit für Ihren Container festgelegt haben. Außerhalb von Docker kann der Linux-Kernel Ihren Prozess überwachen, wenn dem Host selbst der Arbeitsspeicher ausgeht. Linux schreibt in diesem Fall häufig in ein Log in / var / log. Mit Docker Desktop unter Windows und Mac können Sie den der eingebetteten Linux-VM zugewiesenen Speicher in den Docker-Einstellungen anpassen.
quelle
Sie können herausfinden, ob der Prozess im Container OOMkilled war, indem Sie die Protokolle lesen. OOMkills werden vom Kernel initiiert, sodass jedes Mal, wenn dies geschieht, eine Reihe von Zeilen eingefügt werden
/var/log/kern.log
, zum Beispiel:quelle
Während die akzeptierte Antwort die beste Option ist, kann es manchmal nützlich sein, den Inhalt des Journals (unter Linux) vom Host aus zu überprüfen.
Sie können dies tun, indem Sie Folgendes eingeben:
oder es verfolgen
oder leiten Sie den Ausgang auf weniger, wenn er für Ihren Terminalpuffer zu lang ist
quelle