Out of Memory Killer (OOM) es una condición que ocurre en GNU/Linux cuando el sistema comienza a quedarse sin memoria (RAM) debido a que el sistema está bajo una carga pesada o algunos procesos están utilizando demasiada memoria.


Out of Memory Killer (OOM) es una condición que ocurre en GNU/Linux cuando el sistema comienza a quedarse sin memoria (RAM) debido a que el sistema está bajo una carga pesada o algunos procesos están utilizando demasiada memoria.

Esto puede hacer que un programa o proceso se bloquee y el núcleo (kernel) entre en pánico. Es en este momento cuando entra en juego el OOM Killer. Pero, ¿Qué es el oom_killer en GNU/Linux?

¿Qué es el oom_killer?

El OOM Killer (del inglés Out of memory killer y que se podría traducir como "Asesino de Memoria Insuficiente"), es un mecanismo en el núcleo de Linux que maneja la situación cuando el sistema tiene una escasez crítica de memoria (física o de intercambio). Verifica que el sistema realmente esté sin memoria y, si es el caso, selecciona un proceso para matarlo y así liberar memoria (RAM).

¿Por qué sucede esto?

No es que el núcleo de Linux no sepa manejar la memoria correctamente, la cuestión es la siguiente: cuando un proceso comienza, solicita un bloque de memoria del núcleo. El núcleo de Linux entiende que el proceso no usará toda la memoria asignada de inmediato o nunca lo hará. Por lo tanto, ‘sobreasigna’ la memoria al proceso.

Supongamos que un servidor Linux está ejecutando ocho procesos que demandan un total de 5 GB. El núcleo puede “asignar” 5 GB de memoria incluso si el sistema solo tiene 4 GB de RAM. Esto se debe a que no todos los procesos utilizarán su cuota de memoria asignada todo el tiempo.

Sin embargo, si suficientes procesos comienzan a utilizar todos los bloques de memoria solicitados, no habrá suficiente memoria para asignar, y por lo tanto, el sistema operativo se quedará sin memoria.

Es en este momento cuando la característica OOM Killer del núcleo de Linux entra en acción y mata uno o más procesos basándose en su puntuación OOM, liberando memoria para mantener el sistema en funcionamiento.

Puntuación OOM Killer

Cada proceso en ejecución en Linux tiene un oom_score. El sistema operativo lo calcula en base a varios criterios, que están principalmente influenciados por la cantidad de memoria que está usando el proceso. Normalmente, el oom_score varía entre -1000 y 1000. El proceso con el puntaje oom_score más alto es el que se mata primero cuando el sistema empieza a quedarse críticamente bajo en memoria.

Puedes verificar el oom_score de un proceso en ejecución usando su ID de proceso:

cat /proc/[process_ID]/oom_score

Probablemente ya sabes que /proc es una interfaz para los procesos de Linux. Tiene todo tipo de detalles sobre todos los procesos en ejecución.

Puedes cambiar el OOM Score de un proceso de la siguiente manera:

echo -200 > /proc/[process_ID]/oom_score_adj
💡
Puedes verificar los registros y ver si un proceso fue matado por falta de memoria con:
grep oom_killer /var/log/syslog
Debería de mostrar algo como:
Feb 1 13:57:08 server kernel: [677939.847986] php-fpm invoked oom-killer: gfp_mask=0x100cca(GFP_HIGHUSER_MOVABLE), order=0, oom_score_adj=0

Más sobre ./voidNull

Haz que cada palabra cuente: tu donación nos inspira a seguir creando contenido. Accede al apartado de Donación para hacer tu aportación