¿Es posible hacer que el sistema intercambie de manera preventiva páginas inactivas ( vm.swappiness
), pero invoque al oom-killer cuando el sistema se queda sin RAM (en lugar de quedarse sin memoria) y se ve obligado a cambiar?
El objetivo final es evitar que el sistema se detenga cuando comienza a agitar el disco debido a fallas importantes en la página, pero aún así permite que las páginas inactivas se intercambien.
Otro deseo sería configurar la cantidad de memoria de intercambio que el sistema se ve obligado a usar antes de que se active Oom-Killer. De esta manera, el sistema puede sumergirse en el intercambio solo un poco, 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 la caché del sistema de archivos (y así evitar más agitación del disco).
No parece que esto sea tan difícil de hacer. Parece que podrías decirle al asesino de Oom que se dispare cuando el sistema tiene X ram usado / libre. Pero es por eso que pregunto; No lo sé.
Para aclarar, no estoy buscando desactivar el intercambio o ajustar el vm.swappiness
parámetro
fuente
Respuestas:
También luché con ese problema. Solo quiero que mi sistema permanezca receptivo, pase lo que pase, y prefiero perder procesos que 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 Early OOM Daemon ( https://github.com/rfjakob/earlyoom ) que matará el proceso más grande (por RSS) una vez que la RAM disponible sea inferior al 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 del navegador culpable se matan antes de que las cosas se salgan de control.
fuente
column -t -s,
en algunos archivos csv enormes y dejar que loearlyoom
mate cuando eso no sea posible, antes de notar cualquier falta de respuesta.Esto suena como una solución demasiado elaborada. Sugeriría (y hago esto en máquinas que configuro que no necesitan hibernar) simplemente asignando una pequeña cantidad de espacio de intercambio (128-256MiB). De esta manera, el núcleo puede intercambiar algunas páginas, pero el asesino OOM se invoca antes de que las cosas se pongan mal.
Si realmente desea hacer esto, creo que necesitará escribir su propio script / programa que supervise el uso del intercambio e invoque al asesino de OOM utilizando la tecla Magic SysReq (que se puede hacer mediante programación escribiendo
/proc/sysrq-trigger
).fuente
vm.swappiness
e intercambio forzado debido a la falta de memoria RAM. Todo lo que necesita suceder es cuando el núcleo se ve obligado a intercambiar, para desencadenar la muerte. Y 10 gb también deja toneladas de espacio para el intercambio forzado para golpear el disco.