Salta ai contenuti

earlyoom - Cheatsheet Daemon Early Out-of-Memory

earlyoom - Cheatsheet Daemon Early Out-of-Memory

earlyoom è un daemon leggero nello spazio utente che previene il classico problema di Linux “il sistema intero si è congelato quando ha finito la RAM”. Quando la memoria si esaurisce, il uccisore OOM nel kernel spesso reagisce troppo tardi, dopo che la macchina è già diventata non responsiva dal thrashing. earlyoom monitora la RAM e lo swap disponibili e, quando scendono sotto le soglie configurabili, uccide il consumatore di memoria più grande all”inizio — mantenendo il sistema interattivo invece di bloccarsi. È semplice, senza dipendenze e ampiamente utilizzato su desktop e server.

Installazione

PiattaformaComando
Debian/Ubuntusudo apt install earlyoom
Fedorasudo dnf install earlyoom (predefinito su Fedora Workstation)
Arch Linuxsudo pacman -S earlyoom
Dal sorgentemake && sudo make install dal repo
Verificaearlyoom --version

Abilitazione del Servizio

ComandoDescrizione
sudo systemctl enable --now earlyoomAbilita e avvia il daemon
sudo systemctl status earlyoomControlla che sia in esecuzione
journalctl -u earlyoom -fGuarda le sue decisioni dal vivo
earlyoomEsegui in primo piano (test)

Come Decide

earlyoom osserva due numeri e agisce quando entrambi scendono al di sotto delle loro soglie:

MetricaFlagPredefinito-ish
RAM libera %-m PERCENTad es. 10%
Swap libero %-s PERCENTad es. 10%
Trigger di uccisioneentrambi al di sotto delle soglie
# Uccidi quando RAM < 5% E swap < 5%
earlyoom -m 5 -s 5

Opzioni Principali

OpzioneDescrizione
-m PERCENT[,KILL]Soglia RAM per avvertire/uccidere (due valori = avvertire,uccidere)
-s PERCENT[,KILL]Soglia swap per avvertire/uccidere
-M SIZESoglia RAM in KiB invece di percentuale
-r INTERVALIntervallo di rapporto della memoria (secondi)
-nAbilita notifiche desktop su uccisione
-N COMMANDEsegui un comando su uccisione (ad es. avviso personalizzato)
--prefer REGEXPreferisci uccidere i processi che corrispondono a un nome
--avoid REGEXEvita di uccidere i processi che corrispondono a un nome
-pDai a earlyoom stesso un punteggio OOM favorevole
-dAbilita l”output di debug

Preferire / Evitare Processi

# Preferisci uccidere i browser/compilatori; proteggi il server display e sshd
earlyoom -m 8 -s 8 \
  --prefer '(^|/)(chrome|firefox|cc1plus|java)$' \
  --avoid '(^|/)(Xorg|sshd|systemd)$'
DirettivaEffetto
--preferUccidi prima questi quando possibile
--avoidUccidi questi solo come ultimo resort

L”accordatura di questi impedisce a un processo fuori controllo di portare via la tua sessione o l”accesso SSH con esso.

File di Configurazione

Sui sistemi systemd, le opzioni di solito vivono in un file env:

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

Quindi sudo systemctl restart earlyoom.

earlyoom vs systemd-oomd vs kernel OOM

Aspettoearlyoomsystemd-oomdKernel OOM killer
LivelloDaemon nello spazio utenteSpazio utente (systemd, basato su PSI)Kernel
TriggerRAM/swap libero %Pressure Stall Info (PSI)Veramente senza memoria (tardi)
GranularitàProcesso (più grande)cgroup/unitàProcesso
ConfigurazioneFlag semplicipolitica systemd oomdLimitata (oom_score_adj)
Migliore perRete di sicurezza semplice ed efficacecgroup gestiti da systemdUltimo resort

Sui sistemi systemd moderni, systemd-oomd (basato su PSI) è un”alternativa; earlyoom rimane popolare per la sua semplicità e funziona ovunque.

Flussi di Lavoro Comuni

# Desktop: mantieni l''interfaccia utente responsiva, notifica gli uccisioni, proteggi la sessione
earlyoom -m 8 -s 4 -n --avoid '(^|/)(Xorg|gnome-shell|sshd)$'

# Server: soglie conservative, registra ogni azione
sudo systemctl enable --now earlyoom
journalctl -u earlyoom -f

Risorse