Asesino de OOM
El asesino OOM (out-of-memory) es la parte del núcleo de Linux que finaliza un proceso cuando el sistema se queda sin memoria y no puede liberar ninguna. Elige el proceso según su puntuación OOM, por lo general el que utiliza más memoria. El registro del núcleo registra cada OOM kill.
1Cómo se elige a la víctima
Cada proceso tiene una puntuación en /proc/<pid>/oom_score que aumenta con su uso de memoria. /proc/<pid>/oom_score_adj, de -1000 a 1000, la ajusta; -1000 significa que el proceso nunca es elegido.
2Encontrar muertes por OOM
El núcleo escribe 'Out of memory: Killed process' en su registro. journalctl -k | grep -i oom o dmesg | grep -i oom muestran estos mensajes, con el nombre del proceso y su uso de memoria.
3Prevención
Añada memoria o espacio de intercambio (swap), limite los servicios que consumen mucha memoria o establezca límites por servicio con opciones de systemd como MemoryMax=. Algunas distribuciones también ejecutan systemd-oomd, que actúa antes basándose en la presión de la memoria.
Cómo investigar una muerte por OOM
- Busque en el registro del núcleo:
journalctl -k | grep -i -A5 'out of memory' - Anote el proceso finalizado y su tamaño de memoria.
- Compruebe la memoria actual y el espacio de intercambio:
free -h - Encuentre los procesos más grandes:
ps aux --sort=-rss | head - Añada espacio de intercambio o limite el servicio, y luego observe si vuelve a suceder.
Precauciones
- Establecer oom_score_adj en -1000 para muchos procesos puede dejar al núcleo sin una opción segura.
- Desactivar la protección contra asignación excesiva de memoria (overcommit) sin entenderlo puede causar fallos en otras partes.
Artículos relacionados
- Espacio de intercambio en LinuxQué es el espacio de intercambio (swap), cómo consultarlo con free y swapon, cómo añadir un archivo de intercambio y qué modifica vm.swappiness.
- Promedio de cargaQué significan los tres números del promedio de carga, cómo se relacionan con los núcleos de la CPU y cuándo una carga alta es un problema.
- journalctl y el diario de systemdCómo leer registros con journalctl, comprobar cuánto espacio utiliza el diario y reducirlo de forma segura con las opciones --vacuum.
Fuentes
- Página del manual de proc(5): oom_score y oom_score_adj man7.org
- Gestión de falta de memoria (kernel.org) kernel.org
Nota: RainServer ofrece monitorización y limpieza segura para servidores Linux; muestra qué cambiará y pide confirmación primero.
Última revisión: