Heim >Betrieb und Instandhaltung >Docker >Warum gelingt es Docker Kill manchmal nicht, laufende Container zu töten?
Docker Kill-Hauptprozess
1 Die Docker-Engine verwendet SIGKILL, um den Container nach einer gewissen Zeit an den Hauptprozess zu senden Von Containerd wird eine Exit-Nachricht empfangen. Dann ist der Container-Kill erfolgreich.
2. Wenn die Wartezeit im vorherigen Schritt abläuft, überspringt die Docker-Engine Containerd und sendet das SIGKILL-Signal über den Kill-Systemaufruf an den Container-Hauptprozess. Wenn der Kill-Systemaufruf zurückgibt, dass der Hauptprozess zu diesem Zeitpunkt nicht existiert, ist Docker Kill erfolgreich. Andernfalls bleibt der Motor tot, bis Containerd den Motor passiert und der Container austritt.
Wenn ein Problem auftritt, wird festgestellt, dass sich eine große Anzahl von Stressprozessen (eigentlich Containerprozesse) auf dem Host-Computer im D-Zustand befinden, und die Systemreaktion verlangsamt sich. Das Problem kann wie folgt erklärt werden:
1. Nachdem Docker Kill das SIGKill-Signal indirekt über Containerd an den Container-Hauptprozess sendet, wird aufgrund der langsamen Systemreaktion der interne Unterprozess (Stress) Wenn sich der Container im D-Zustand befindet, hat Containerd während des Timeout-Zeitraums den Containerausgang nicht gemeldet. Docker kill hat das Stadium des direkten Sendens von Sigkill erreicht
2. Vor diesem Stadium wurde der Hauptprozess im Container beendet, sodass der Systemaufruf kill zum Senden von SIGKILL bald zurückgibt Prozess existiert nicht. Die Engine geht davon aus, dass sie den Container getötet hat, und Docker kill kehrt erfolgreich zurück.3. Nach einer bestimmten Zeit werden die Container-Unterprozesse aus dem D-Zustand wiederhergestellt. Containerd meldet den Container-Exit und die Engine bereinigt die Ressourcen ps sieht, dass sich der Container im Exit-Status befindet.
Der Haupt-/Unterprozess des Containers befindet sich im D-Zustand
Der Prozess-D-Zustand bedeutet, dass sich der Prozess in einem ununterbrochenen Ruhezustand befindet und normalerweise auf E/A-Ressourcen wartet. Wenn es ein Problem mit der System-E/A gibt, befindet sich natürlich manchmal eine große Anzahl von Prozessen im D-Zustand. In diesem Zustand kann das Signal den Prozess nicht aufwecken; es kann nur darauf warten, dass der Prozess aus dem D-Zustand zurückkehrt. Und wenn sich im herkömmlichen Kernel ein Prozess im D-Zustand befunden hat, gibt es theoretisch keine Möglichkeit oder Möglichkeit, ihn von D wiederherzustellen, außer das System neu zu starten.
Weitere verwandte Tutorials finden Sie in der Spalte
Docker-Tutorialauf der chinesischen PHP-Website.
Das obige ist der detaillierte Inhalt vonWarum gelingt es Docker Kill manchmal nicht, laufende Container zu töten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!