È possibile fare in modo che il sistema scambi preventivamente le pagine inattive (vm.swappiness
), ma invocare oom-killer quando il sistema esaurisce la RAM (invece di esaurire la memoria) ed è costretto a scambiare?
L'obiettivo finale è evitare che il sistema si fermi quando inizia a rompersi il disco a causa di gravi errori di pagina, ma lasciare comunque che le pagine inattive vengano scambiate.
Un altro desiderio sarebbe configurare la quantità di memoria di scambio che il sistema è costretto a utilizzare prima che si attivi oom-killer. In questo modo il sistema può immergersi un po' nello scambio, purché non vada troppo lontano. Oppure potrei impostare una tale soglia per attivare oom-killer prima di utilizzare tutta la RAM in modo che ci sia sempre spazio per la cache del file system (e quindi evitare più thrashing del disco).
Non sembra che sarebbe così difficile da fare. Sembra che tu possa semplicemente dire all'oom-killer di attivarsi quando il sistema ha X ram usato/libero. Ma questo è il motivo per cui sto chiedendo; Non lo so.
Per chiarimenti, non sto cercando di disattivare lo scambio o di modificare il vm.swappiness
parametro
Risposta accettata:
Ho anche lottato con quel problema. Voglio solo che il mio sistema rimanga reattivo, qualunque cosa accada, e preferisco perdere i processi piuttosto che aspettare qualche minuto. Non sembra esserci alcun modo per ottenere questo risultato usando il kernel oom killer.
Tuttavia, nello spazio utente, possiamo fare quello che vogliamo. Quindi ho scritto il demone Early OOM
( https://github.com/rfjakob/earlyoom ) che interromperà il processo più grande (tramite RSS) una volta che la RAM disponibile scenderà al di sotto del 10%.
Senza earlyoom, è stato facile bloccare la mia macchina (8 GB di RAM) avviando http://www.unrealengine.com/html5/ alcune volte. Ora, le schede colpevoli del browser vengono eliminate prima che le cose sfuggano di mano.