earlyoom - Demonio de falta de memoria temprana
earlyoom - Demonio de falta de memoria temprana
earlyoom es un demonio ligero del espacio de usuario que evita el problema clásico de Linux “todo el sistema se congeló cuando se quedó sin RAM”. Cuando la memoria se agota, el asesino OOM en el kernel a menudo reacciona demasiado tarde, después de que la máquina ya se ha vuelto sin respuesta por thrashing. earlyoom monitorea RAM disponible e intercambio y, cuando caen por debajo de umbrales configurables, mata al consumidor de memoria más grande temprano — manteniendo el sistema interactivo en lugar de colgarse. Es simple, sin dependencias y ampliamente utilizado en escritorios y servidores.
Instalación
| Plataforma | Comando |
|---|---|
| Debian/Ubuntu | sudo apt install earlyoom |
| Fedora | sudo dnf install earlyoom (predeterminado en Fedora Workstation) |
| Arch Linux | sudo pacman -S earlyoom |
| Desde fuente | make && sudo make install desde el repositorio |
| Verificar | earlyoom --version |
Habilitando el servicio
| Comando | Descripción |
|---|---|
sudo systemctl enable --now earlyoom | Habilita e inicia el demonio |
sudo systemctl status earlyoom | Comprueba que está en ejecución |
journalctl -u earlyoom -f | Observa sus decisiones en vivo |
earlyoom | Ejecuta en primer plano (pruebas) |
Cómo decide
earlyoom observa dos números y actúa cuando ambos caen por debajo de sus umbrales:
| Métrica | Bandera | Por defecto |
|---|---|---|
| % de RAM libre | -m PERCENT | por ejemplo 10% |
| % de intercambio libre | -s PERCENT | por ejemplo 10% |
| Desencadenador de muerte | ambos por debajo de umbrales | — |
# Mata cuando RAM < 5% Y intercambio < 5%
earlyoom -m 5 -s 5
Opciones clave
| Opción | Descripción |
|---|---|
-m PERCENT[,KILL] | Umbral de RAM para advertir/matar (dos valores = advertir,matar) |
-s PERCENT[,KILL] | Umbral de intercambio para advertir/matar |
-M SIZE | Umbral de RAM en KiB en lugar de porcentaje |
-r INTERVAL | Intervalo de informe de memoria (segundos) |
-n | Habilita notificaciones de escritorio en muerte |
-N COMMAND | Ejecuta un comando en muerte (por ejemplo, alerta personalizada) |
--prefer REGEX | Prefiere matar procesos que coincidan con un nombre |
--avoid REGEX | Evita matar procesos que coincidan con un nombre |
-p | Otorga a earlyoom una puntuación OOM favorable |
-d | Habilita salida de depuración |
Preferir / Evitar procesos
# Prefiere matar navegadores/compiladores; protege el servidor de pantalla y sshd
earlyoom -m 8 -s 8 \
--prefer '(^|/)(chrome|firefox|cc1plus|java)$' \
--avoid '(^|/)(Xorg|sshd|systemd)$'
| Directiva | Efecto |
|---|---|
--prefer | Mata estas primero si es posible |
--avoid | Mata estas solo como último recurso |
Ajustar estos mantiene un proceso fuera de control de llevarse la sesión o el acceso SSH con él.
Archivo de configuración
En distros de systemd, las opciones generalmente viven en un archivo env:
# /etc/default/earlyoom (Debian) o el EnvironmentFile de la unidad
EARLYOOM_ARGS="-m 5 -s 5 -r 60 --avoid '(^|/)(sshd|Xorg)$'"
Luego sudo systemctl restart earlyoom.
earlyoom vs systemd-oomd vs kernel OOM
| Aspecto | earlyoom | systemd-oomd | Asesino OOM del kernel |
|---|---|---|---|
| Capa | Demonio del espacio de usuario | Espacio de usuario (systemd, basado en PSI) | Kernel |
| Desencadenador | % de RAM/intercambio libre | Información de estrés de presión (PSI) | Verdaderamente sin memoria (tarde) |
| Granularidad | Proceso (más grande) | cgroup/unidad | Proceso |
| Configuración | Banderas simples | Política de oomd de systemd | Limitado (oom_score_adj) |
| Mejor para | Red de seguridad simple efectiva | cgroups gestionados por systemd | Último recurso |
En distros de systemd modernos,
systemd-oomd(basado en PSI) es una alternativa; earlyoom sigue siendo popular por su simplicidad y funciona en cualquier lugar.
Flujos de trabajo comunes
# Escritorio: mantén la interfaz de usuario responsiva, notifica en muertes, protege la sesión
earlyoom -m 8 -s 4 -n --avoid '(^|/)(Xorg|gnome-shell|sshd)$'
# Servidor: umbrales conservadores, registra todas las acciones
sudo systemctl enable --now earlyoom
journalctl -u earlyoom -f