Ir al contenido

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

PlataformaComando
Debian/Ubuntusudo apt install earlyoom
Fedorasudo dnf install earlyoom (predeterminado en Fedora Workstation)
Arch Linuxsudo pacman -S earlyoom
Desde fuentemake && sudo make install desde el repositorio
Verificarearlyoom --version

Habilitando el servicio

ComandoDescripción
sudo systemctl enable --now earlyoomHabilita e inicia el demonio
sudo systemctl status earlyoomComprueba que está en ejecución
journalctl -u earlyoom -fObserva sus decisiones en vivo
earlyoomEjecuta en primer plano (pruebas)

Cómo decide

earlyoom observa dos números y actúa cuando ambos caen por debajo de sus umbrales:

MétricaBanderaPor defecto
% de RAM libre-m PERCENTpor ejemplo 10%
% de intercambio libre-s PERCENTpor ejemplo 10%
Desencadenador de muerteambos por debajo de umbrales
# Mata cuando RAM < 5% Y intercambio < 5%
earlyoom -m 5 -s 5

Opciones clave

OpciónDescripción
-m PERCENT[,KILL]Umbral de RAM para advertir/matar (dos valores = advertir,matar)
-s PERCENT[,KILL]Umbral de intercambio para advertir/matar
-M SIZEUmbral de RAM en KiB en lugar de porcentaje
-r INTERVALIntervalo de informe de memoria (segundos)
-nHabilita notificaciones de escritorio en muerte
-N COMMANDEjecuta un comando en muerte (por ejemplo, alerta personalizada)
--prefer REGEXPrefiere matar procesos que coincidan con un nombre
--avoid REGEXEvita matar procesos que coincidan con un nombre
-pOtorga a earlyoom una puntuación OOM favorable
-dHabilita 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)$'
DirectivaEfecto
--preferMata estas primero si es posible
--avoidMata 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

Aspectoearlyoomsystemd-oomdAsesino OOM del kernel
CapaDemonio del espacio de usuarioEspacio de usuario (systemd, basado en PSI)Kernel
Desencadenador% de RAM/intercambio libreInformación de estrés de presión (PSI)Verdaderamente sin memoria (tarde)
GranularidadProceso (más grande)cgroup/unidadProceso
ConfiguraciónBanderas simplesPolítica de oomd de systemdLimitado (oom_score_adj)
Mejor paraRed de seguridad simple efectivacgroups 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

Recursos