Comment résoudre les problèmes de redémarrage des conteneurs OOM Killer pour les conteneurs Docker ?
4843
Created On 05/29/25 21:30 PM - Last Modified 07/09/25 17:28 PM
Objective
- Examinez la sortie des commandes Docker suivantes :
- docker ps
- inspection du docker
- statistiques du docker
L'objectif est de déterminer si le conteneur Docker a redémarré, si oui, OOM Killer est-il la cause des redémarrages du conteneur.
Environment
- Machine Linux/macOS
- environnement d'exécution Docker
Procedure
- docker ps
1. Cette commande affichera les conteneurs en cours d’exécution dans votre environnement.
2. La colonne STATUT doit être vérifiée pour déterminer depuis combien de temps le conteneur
j'étais en bonne santé et je courais.
3. Le temps d'exécution prouvera que le conteneur a peut-être été redémarré/recréé il y a 2 heures (dans ce cas) - inspection du docker
1. L'extrait ci-dessous a été extrait de la sortie de cette commande, il confirme que OOM Killer était la cause de la destruction/de la destruction du conteneur.
Le conteneur a été tué pour la dernière fois le FinishedAt : « 2025-05-19T13:42:31.566652718Z par le Processus tueur OOM.
2. Il y a un autre extrait ou plutôt une seule ligne dans la sortie de cette commande qui mentionne que « RestartCount » : 41. - statistiques de Docker
1. Cette commande affichera la limite de groupe de contrôle définie pour le conteneur, qui est très probablement dépassée, provoquant les redémarrages.
Résolution:
La mettre à jour de Docker La commande est un utilitaire puissant qui vous permet de modifier certaines limites de ressources et options de configuration pourconteneurs en cours d'exécutionsans avoir à les arrêter et à les recréer. Cela peut s'avérer très utile pour ajuster dynamiquement l'allocation des ressources en fonction de la charge de travail.
Voici comment mettre à jour Docker œuvres, notamment en ce qui concerne les limites des ressources :
-
Limites de mémoire :
--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
- Dans ce cas d'utilisation, 4 Go de mémoire ne suffisent pas pour le conteneur, ce qui entraîne des redémarrages. La commande suivante permet de corriger ce problème :
docker update --memory=6g <name-of-the-container>
Veuillez noter que :
- 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
Les messages OOM peuvent être vérifiés en utilisant la commande suivante :
sudo dmesg -T | grep -i "oom-killer" or sudo journalctl -k | grep -i "oom-killer"