Aller au contenu

earlyoom - Daemon Out-of-Memory précoce

earlyoom - Daemon Out-of-Memory précoce

earlyoom est un daemon léger de l’espace utilisateur qui empêche le classique problème Linux « tout le système a gelé quand il a manqué de RAM ». Quand la mémoire devient faible, le tueur OOM du noyau en mémoire réagit souvent trop tard, après que la machine soit déjà devenue non-réactive du fait du thrashing. earlyoom surveille la RAM disponible et le swap et, quand ils tombent en dessous des seuils configurables, tue le plus gros consommateur de mémoire plus tôt — gardant le système interactif au lieu de s’arrêter. C’est simple, sans dépendances et largement utilisé sur les bureaux et serveurs.

Installation

PlateformeCommande
Debian/Ubuntusudo apt install earlyoom
Fedorasudo dnf install earlyoom (par défaut sur Fedora Workstation)
Arch Linuxsudo pacman -S earlyoom
Depuis la sourcemake && sudo make install depuis le dépôt
Vérifierearlyoom --version

Activation du service

CommandeDescription
sudo systemctl enable --now earlyoomActiver et démarrer le daemon
sudo systemctl status earlyoomVérifier qu’il s’exécute
journalctl -u earlyoom -fRegarder ses décisions en direct
earlyoomExécuter au premier plan (test)

Comment il décide

earlyoom regarde deux nombres et agit quand tous les deux tombent en dessous de leurs seuils :

MétriqueDrapeauEnviron par défaut
RAM libre %-m PERCENTpar ex. 10%
Swap libre %-s PERCENTpar ex. 10%
Déclencheur de killtous les deux sous les seuils
# Kill when RAM < 5% AND swap < 5%
earlyoom -m 5 -s 5

Options principales

OptionDescription
-m PERCENT[,KILL]Seuil RAM pour avertir/tuer (deux valeurs = avertir,tuer)
-s PERCENT[,KILL]Seuil swap pour avertir/tuer
-M SIZESeuil RAM en KiB au lieu de pourcentage
-r INTERVALIntervalle de rapport mémoire (secondes)
-nActiver les notifications de bureau sur le kill
-N COMMANDExécuter une commande au kill (par ex. alerte personnalisée)
--prefer REGEXPréférer tuer les processus correspondant à un nom
--avoid REGEXÉviter de tuer les processus correspondant à un nom
-pDonner à earlyoom un score OOM favorable
-dActiver la sortie de débogage

Préférer / Éviter les processus

# Prefer killing browsers/compilers; protect the display server and sshd
earlyoom -m 8 -s 8 \
  --prefer '(^|/)(chrome|firefox|cc1plus|java)$' \
  --avoid '(^|/)(Xorg|sshd|systemd)$'
DirectiveEffet
--preferTuer d’abord ceux-ci quand possible
--avoidTuer ceux-ci en dernier recours

Ajuster ceux-ci empêche un processus emballé de prendre votre session ou accès SSH avec lui.

Fichier de configuration

Sur les distros systemd, les options vivent généralement dans un fichier env :

# /etc/default/earlyoom  (Debian) or the unit's EnvironmentFile
EARLYOOM_ARGS="-m 5 -s 5 -r 60 --avoid '(^|/)(sshd|Xorg)$'"

Puis sudo systemctl restart earlyoom.

earlyoom vs systemd-oomd vs kernel OOM

Aspectearlyoomsystemd-oomdKernel OOM killer
CoucheDaemon utilisateurUtilisateur (systemd, PSI-based)Noyau
DéclencheurRAM/swap libre %Pressure Stall Info (PSI)Véritablement à court de mémoire (tard)
GranularitéProcessus (plus gros)cgroup/unitProcessus
ConfigDrapeaux simplesPolitique oomd systemdLimité (oom_score_adj)
Meilleur pourFilet de sécurité simple et efficacecgroups gérées par systemdDernier recours

Sur les distros systemd modernes, systemd-oomd (PSI-based) est une alternative ; earlyoom reste populaire pour sa simplicité et fonctionne partout.

Flux de travail courants

# Desktop: keep the UI responsive, notify on kills, protect the session
earlyoom -m 8 -s 4 -n --avoid '(^|/)(Xorg|gnome-shell|sshd)$'

# Server: conservative thresholds, log every action
sudo systemctl enable --now earlyoom
journalctl -u earlyoom -f

Ressources