Earlyoom: Evitare il blocco del sistema a causa della fine della memoria

Tags: 

I miei pc sono configurati per avere uno swap minimo dal momento che in genere la memoria ram basta e avanza, ma ogni tanto capita, a causa di sviste o bug, che la memoria si riempie completamente e il sistema diventa inutilizzabile.

Basterebbe riuscire a fare un kill, anche solo poter entrare in un terminale testuale per farlo, ma spesso è impossibile. In teoria il kernel dovrebbe avere un "OOM killer" (out of memory killer) che si occupa di eliminare un processo per rendere il sistema nuovamente reattivo, ma in pratica non viene eseguito mai.

 

Recentemente ho trovato una soluzione che sembra molto promettente e sto testando su tutte le mie macchine desktop:

https://github.com/rfjakob/earlyoom

E' un processo systemd che gira nello user-space, e quando la memoria disponibile raggiunge un minimo (di base 10%) si occupa di fare il kill del processo utente che occupa più ram. E' possibile dargli dei processi preferiti da killare, o da evitare, e modificare diverse altre opzioni.

 

Personalmente in /etc/defaults/earlyoom (valori di default da usare) ho messo questa impostazione:

EARLYOOM_ARGS="-r 60 -m 5 --avoid '(^|/)(init|X|sshd|kdevelop.*)$' --prefer '^(spotify)$' -N 'sudo -u eric DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send'"

-r 60: logga lo stato ogni 60 secondi

-m 5: killa qualcosa quando arriva al 5%

--avoid evita di killare alcuni processi

--prefer se c'è spotify killa per prima cosa lui (dopo giorni di esecuzione accumula dei leak di memoria paurosi)

-N mette un comando per fare la notifica a video. Il parametro lunghissimo serve per far prendere il display grafico del mio utente (eric, con uid 1000) anche se avviato da servizio

 

Vediamo se funziona bene...

Aggiungi un commento