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_scoreProbablemente 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_adjgrep oom_killer /var/log/syslogDeberí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=0Más sobre ./voidNull
- 📖 Aprende todos sobre los comandos de GNU/Linux en nuestro Diccionario "De la A a la Z: Los comandos de GNU/Linux"
- 💪 ¡Forma parte de la Comunidad de ./voidNull!
- 🤖 Disfruta de todos nuestros Cursos sobre Ansible, Proxmox, Home Assistant entre otros.
- 📩 Mantente actualizado con lo último en GNU/Linux y Software Libre. Recibe nuestra Newsletter mensual.
Comentarios