Guía de choom en Linux: ajusta el OOM Killer y protege procesos

Visión general

Cuando un sistema Linux agota su memoria RAM disponible, entra en acción el mecanismo OOM (Out of Memory) Killer para seleccionar y terminar tareas en función de su puntaje de sacrificio. En este artículo profundizaremos en el comando choom, una utilidad diseñada para auditar y manipular este comportamiento mediante la variable oom_score_adj. Aprenderemos de forma práctica en la terminal a consultar las puntuaciones vigentes, modificar prioridades en tiempo de ejecución y blindar procesos críticos para prevenir su cierre forzado.

1. Fundamentos de choom y preparación del entorno de trabajo

Para experimentar con el ajuste de prioridades OOM y gestionar tareas del sistema, nos aseguramos de contar con las herramientas básicas provistas por los paquetes util-linux y procps:

Instalación de paquetes requeridos

La herramienta choom interactúa directamente con el kernel de Linux para leer o establecer el valor de compensación oom_score_adj, el cual determina qué procesos serán sacrificados primero ante una emergencia de memoria.
Ejecutando el modificador --help podemos repasar los parámetros fundamentales del comando:
⚙️ [Opciones principales]

-p, --pid : Señala el identificador del proceso (PID) que se desea inspeccionar o reconfigurar.
-n, --adjust : Define el nuevo valor de ponderación para el OOM Killer (en una escala de -1000 a 1000).
-h, --help : Despliega la ayuda con la sintaxis de uso.
-V, --version : Muestra la versión actual del programa.

Sintaxis y opciones de choom

2. Inspección del puntaje OOM en procesos activos

Con el fin de disponer de una tarea en segundo plano sobre la cual experimentar, lanzamos un comando de espera configurado para 10 minutos mediante sleep 600 &:

Inicio de proceso en segundo plano

A continuación, capturamos el PID correspondiente en la variable TARGET_PID y recurrimos a choom -p para consultar el valor actual de oom_score_adj:
En circunstancias habituales, cualquier proceso recién creado sin alteraciones personalizadas devolverá 0 como puntuación predeterminada.

Consulta de oom_score_adj con choom

Para corroborar que la respuesta de choom coincide fielmente con los registros internos del kernel, accedemos directamente al sistema de archivos virtual /proc:
La lectura del archivo valida que el parámetro del kernel se encuentra en 0, ratificando la precisión del comando anterior.

Comprobación del valor en el sistema proc

3. Alteración dinámica de la prioridad OOM con choom

Si requerimos que un proceso sea candidato preferente a ser eliminado en caso de saturación de recursos, le asignamos un puntaje positivo elevado —por ejemplo 500— mediante el flag -n y ejecutamos la acción con privilegios administrativos (sudo):
Una ponderación positiva en oom_score_adj incrementa notablemente la probabilidad de que el kernel liquide este proceso ante una crisis de memoria.

Ajuste del puntaje OOM a 500

Comprobamos de inmediato si el kernel aceptó el nuevo valor ejecutando nuevamente choom -p sobre el identificador objetivo:
El resultado refleja de forma instantánea el cambio desde el valor base 0 hacia el nuevo umbral de 500.

Verificación de la nueva puntuación

4. Inicialización de procesos protegidos y depuración del sistema

En el caso de servicios críticos que jamás deban interrumpirse, podemos invocarlos estableciendo desde el inicio una compensación de -1000:
Al situar el ajuste en su mínimo absoluto (-1000), el OOM Killer descarta por completo al proceso de su lista de objetivos, manteniéndolo a salvo incluso en escenarios de escasez extrema de memoria.

Ejecución de proceso con protección OOM máxima

Almacenamos el PID de esta nueva tarea en TARGET_PID y validamos su configuración con choom -p:
La salida confirma el registro de -1000, lo que demuestra que la protección activa entró en vigor desde el primer instante de ejecución.

Validación de la protección de proceso

Una vez completadas las pruebas, procedemos a liberar los recursos del sistema terminando el proceso que habíamos dejado en ejecución mediante pkill -f 'sleep 600' || true:
Esta práctica garantiza que no queden tareas residuales consumiendo memoria innecesariamente tras nuestras sesiones de laboratorio.

Limpieza de procesos residuales

Dominar el uso de choom constituye una habilidad indispensable para cualquier administrador de sistemas que busque optimizar la resiliencia en Linux. Ajustar de forma estratégica la susceptibilidad de cada servicio frente al OOM Killer asegura la continuidad de las cargas de trabajo más críticas en entornos de producción.