Wie behebt man Probleme mit OOM-Killer-Containerneustarts für Docker-Container?
4897
Created On 05/29/25 21:30 PM - Last Modified 07/09/25 17:28 PM
Objective
- Überprüfen Sie die Ausgabe der folgenden Docker-Befehle:
- Docker PS
- Docker-Inspektion
- Docker-Statistiken
Das Ziel besteht darin, festzustellen, ob der Docker-Container neu gestartet wurde. Wenn ja, ist OOM-Killer die Ursache für den Neustart des Containers.
Environment
- Linux/macOS-Maschine
- Docker-Laufzeit
Procedure
- Docker PS
1. Dieser Befehl zeigt die laufenden Container in Ihrer Umgebung an.
2. Die Spalte STATUS muss überprüft werden, um festzustellen, wie lange der Container
war gesund und lief.
3. Die Laufzeit beweist, dass der Container möglicherweise (in diesem Fall) 2 Stunden lang neu gestartet/neu erstellt wurde. - Docker-Inspektion
1. Der unten gezeigte Ausschnitt wurde aus der Ausgabe dieses Befehls ausgeschnitten. Er bestätigt, dass OOM Killer die Ursache für das Herunterfahren/Beenden des Containers war.
Der Container wurde zuletzt am FinishedAt": "2025-05-19T13:42:31.566652718Z durch den OOM-Killerprozess.
2. Es gibt einen weiteren Codeausschnitt bzw. eine einzelne Zeile in der Ausgabe dieses Befehls, in der „RestartCount“ erwähnt wird: 41. - Docker-Statistiken
1. Dieser Befehl zeigt das für den Container festgelegte Cgroup-Limit an, das höchstwahrscheinlich überschritten wird und die Neustarts verursacht.
Auflösung:
Das Docker- aktualisieren Der Befehl ist ein leistungsstarkes Dienstprogramm, mit dem Sie bestimmte Ressourcenlimits und Konfiguration fürAusführen von Containernohne sie anhalten und neu erstellen zu müssen. Dies kann sehr nützlich sein, um die Ressourcenzuweisung dynamisch an die Arbeitslast anzupassen.
So aktualisieren Sie Docker funktioniert, insbesondere im Hinblick auf Ressourcenbeschränkungen:
-
Speichergrenzen:
--memoryor-m: Sets the maximum amount of memory the container can use (e.g.,512m,2g). If a container exceeds this limit, it may be OOMKilled (Out Of Memory Killed) by the system.--memory-swap: The total amount of memory and swap the container can use. If you set--memorybut not--memory-swap, the container can use swap space up to twice the memory limit (if host swap is enabled). To prevent a container from using any swap, set--memory-swapto the same value as--memory
- In diesem Anwendungsfall reicht der 4-Gi-Speicher für den Container nicht aus, daher kommt es zu Containerneustarts. Dies kann mit dem folgenden Befehl geändert werden:
docker update --memory=6g <name-of-the-container>
Bitte beachten Sie:
- Memory Swap (
--memory-swap): Allows you to update the total memory the container can use (RAM + Swap).- If
--memory-swapis set to the same value as--memory, the container cannot use swap. - If
--memory-swapis-1, the container can use unlimited swap (up to the host's available swap). - If
--memoryis set and--memory-swapis not, the container can use swap up to the same amount as the memory limit (total 2x the memory limit)
- If
Additional Information
Die OOM-Meldungen können mit dem folgenden Befehl überprüft werden:
sudo dmesg -T | grep -i "oom-killer" or sudo journalctl -k | grep -i "oom-killer"