Come posso dare di nuovo i denti killer OOM?


12

Ai tempi ero solito maledire il killer OOM per essere stato troppo aggressivo e uccidendo le app che stavo usando. Ora, mentre guardo periodicamente il mio sistema che si rompe per 15 minuti a causa di un programma mal comportato, e poi finalmente ricorro a uno spegnimento forzato perché non risponde alla tastiera, mi rendo conto di averlo meglio di quanto pensassi allora.

Come faccio a ripristinare OOM-killer ai suoi vecchi modi assetati di sangue?


1
Dai un'occhiata ai programmi che causano un problema e limita la quantità di memoria che possono aspirarelimits.conf
LawrenceC

Risposte:


4

Diminuirei la quantità di spazio di swap che hai a disposizione. Le installazioni tipiche in questi giorni tentano di allocare tutta la quantità di swap della memoria fisica (o talvolta il doppio). Il problema è che quando qualcosa va storto, il sistema entra in una spirale mortale nel tentativo di "rimescolare" le cose dalla memoria al disco e viceversa, e inizia a fare così tanto che non ha tempo di rispondere all'input dell'utente.

Nei giorni buoni, interi processi venivano scambiati su disco (e viceversa), quindi erano necessari grandi scambi.

Nei moderni sistemi di memoria virtuale, la memoria viene scambiata in blocchi (anziché in interi processi), quindi puoi cavartela con piccoli scambi. Nel tuo scenario, faresti meglio ad avere i processi uccisi, quindi l'esecuzione con swap più piccoli farà sì che OOM inizi a uccidere i processi prima (piuttosto che il sistema impiega quantità eccessive di tempo a scambiare oggetti da / su disco).


Ho zero swap e il mio sistema si blocca per 20+ minuti quando ho un loop javascript infinito in cromo che spinge su un array o qualcosa del genere. Devo attivare OOMK prima che il mio sistema sia inutile, non molto dopo.
JasonWoof

0

Ecco cosa ha funzionato per me:

echo 1 > /proc/sys/vm/oom_kill_allocating_task

Questo è solo per questo stivale. Puoi provare eseguendo quanto segue nella scheda della console della finestra di ispezione del tuo browser:

a = []; while (true) { a.push(1); }

Se sei soddisfatto di questa impostazione, puoi eseguire l'impostazione predefinita per tutti gli stivali futuri:

echo "vm.oom_kill_allocating_task=1" >> /etc/sysctl.conf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.