¿Cómo solucionar problemas de reinicios del contenedor asesino OOM para contenedores Docker?
4759
Created On 05/29/25 21:30 PM - Last Modified 07/09/25 17:28 PM
Objective
- Revise la salida de los siguientes comandos de Docker:
- docker ps
- inspección de Docker
- estadísticas de Docker
El objetivo es determinar si el contenedor Docker se ha reiniciado, y si es así, ¿OOM Killer es la causa de los reinicios del contenedor?
Environment
- Máquina Linux/macOS
- Tiempo de ejecución de Docker
Procedure
- Docker PS
1. Este comando mostrará los contenedores en ejecución en su entorno.
2. Se debe verificar la columna ESTADO para determinar cuánto tiempo lleva el contenedor
He estado sano y funcionando.
3. El tiempo de ejecución demostrará que el contenedor se reinició o recreó quizás 2 horas después (en este caso). - inspección de Docker
1. El fragmento que se muestra a continuación se ha extraído de la salida de este comando y confirma que OOM Killer fue la causa de la caída/eliminación del contenedor.
El contenedor fue eliminado por última vez el FinishedAt": "2025-05-19T13:42:31.566652718Z por el Proceso asesino OOM.
2. Hay un fragmento más, o mejor dicho, una sola línea, en la salida de este comando que menciona que "ReinicioCount": 41. - estadísticas de Docker
1. Este comando mostrará el límite de cgroup establecido para el contenedor, que probablemente se esté excediendo y eso es lo que provoca los reinicios.
Resolución:
La actualizar de Docker command es una potente utilidad que le permite modificar ciertos límites de recursos y opciones de configuración paracontenedores en funcionamientoSin necesidad de detenerlos ni recrearlos. Esto puede ser muy útil para ajustar dinámicamente la asignación de recursos según la carga de trabajo.
Así es como se actualiza Docker obras, especialmente en relación con los límites de recursos:
-
Límites de memoria:
--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
- En este caso, la memoria de 4 Gi no es suficiente para el contenedor, por lo que se observan reinicios. Esto se puede solucionar con el siguiente comando:
docker update --memory=6g <name-of-the-container>
Tenga en cuenta 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
Los mensajes OOM se pueden comprobar utilizando el siguiente comando:
sudo dmesg -T | grep -i "oom-killer" or sudo journalctl -k | grep -i "oom-killer"