Je možné, aby systém preventivně vyměnil neaktivní stránky (vm.swappiness
), ale vyvolat oom-killer, když systému dojde RAM (na rozdíl od nedostatku paměti) a je nucen provést swap?
Konečným cílem je zajistit, aby se systém nezastavil, když začne mlátit disk kvůli závažným chybám stránek, ale přesto nechat vyměnit neaktivní stránky.
Dalším přáním by bylo nakonfigurovat, kolik odkládací paměti je systém nucen použít, než se spustí oom-killer. Tímto způsobem se systém může ponořit do swapu jen trochu, pokud to nezajde příliš daleko. Nebo bych mohl nastavit takový práh, aby se spustil oom-killer před použitím celé paměti RAM, takže vždy bude místo pro mezipaměť systému souborů (a tím se zabrání dalšímu drcení disku).
Nezdá se, že by to bylo tak těžké. Zdá se, že byste mohli prostě říct oom-killeru, aby se spustil, když má systém X RAM použito/volně. Ale proto se ptám; Nevím.
Pro upřesnění, nechci vypnout swap nebo upravit vm.swappiness
parametr
Přijatá odpověď:
Také jsem s tím problémem bojoval. Chci jen, aby můj systém neustále reagoval, bez ohledu na to, a dávám přednost ztrátě procesů před čekáním pár minut. Zdá se, že neexistuje způsob, jak toho dosáhnout pomocí kernel oom killer.
V uživatelském prostoru si však můžeme dělat, co chceme. Napsal jsem tedy Early OOM Daemon
( https://github.com/rfjakob/earlyoom ), který zabije největší proces (podle RSS), jakmile dostupná RAM klesne pod 10 %.
Bez earlyoom bylo snadné zamknout můj počítač (8 GB RAM) tím, že několikrát spustím http://www.unrealengine.com/html5/. Nyní jsou provinilé karty prohlížeče zabity dříve, než se věci vymknou kontrole.