¿Es posible que el sistema cambie de forma preventiva las páginas inactivas (vm.swappiness
), pero invoque el oom-killer cuando el sistema se quede sin RAM (en lugar de quedarse sin memoria) y se vea obligado a intercambiar?
El objetivo final es evitar que el sistema se detenga cuando comienza a trabajar mal el disco debido a fallas importantes en la página, pero aún permitir que las páginas inactivas se intercambien.
Otro deseo sería configurar la cantidad de memoria de intercambio que el sistema debe usar antes de que se active oom-killer. De esta manera, el sistema puede sumergirse un poco en el intercambio, siempre que no vaya demasiado lejos. O podría establecer dicho umbral para activar oom-killer antes de usar toda la RAM para que siempre haya espacio para el caché del sistema de archivos (y así evitar más golpes de disco).
No parece que esto sea tan difícil de hacer. Parece que podría decirle al oom-killer que se dispare cuando el sistema tenga X RAM usada/libre. Pero es por eso que estoy preguntando; No lo sé.
Para aclarar, no estoy buscando desactivar el intercambio o ajustar el vm.swappiness
parámetro
Respuesta aceptada:
También luché con ese problema. Solo quiero que mi sistema siga respondiendo, pase lo que pase, y prefiero perder procesos a esperar unos minutos. Parece que no hay forma de lograr esto usando el kernel oom killer.
Sin embargo, en el espacio del usuario, podemos hacer lo que queramos. Así que escribí el Demonio Early OOM
( https://github.com/rfjakob/earlyoom ) que matará el proceso más grande (por RSS) una vez que la RAM disponible esté por debajo del 10%.
Sin Earlyoom, ha sido fácil bloquear mi máquina (8 GB de RAM) iniciando http://www.unrealengine.com/html5/ varias veces. Ahora, las pestañas culpables del navegador se eliminan antes de que las cosas se salgan de control.