Linux sin swap todavía comienza a fallar

Linux sin swap todavía comienza a fallar

Debian 9.4, Linux 4.9

A veces compilo algo que apenas cabe en la RAM, o un proceso rojo de repente comienza a consumir memoria más allá de la disponible. Cuando el proceso supera la RAM disponible, Linux comienza a destruir el disco a pesar de que no tengo habilitado el intercambio (ningún intercambio fue un intento de evitar esto). ¿Supongo que comienza a descartar y recargar cosas como las mmappartes ped de los binarios que se están ejecutando actualmente?

En este punto, mi sesión X rápidamente deja de responder y todo lo que puedo hacer es esperar docenas de minutos hasta que se cierre toda la sesión X y pueda volver a iniciar sesión.

Intenté buscar soluciones, pero nada parece funcionar. El asesino de OOM no detecta este proceso y vm.overcommit_memory=2ni siquiera puedo iniciar sesión con GDM y Gnome.

Hay alguna maneradecirle a Linux que no cambie en absoluto? De esa manera, al menos tendría la posibilidad de que un error falle y elimine el proceso de colorete malloc, e incluso si no, al menos no tendría que esperar mientras miro una máquina que no responde.

¿O alguna otra sugerencia sobre cómo gestionar este escenario?

Respuesta1

Si está compilando fuentes que requieren casi toda la RAM disponible, si no más, probablemente la única solución eficaz sea agregar RAM real. Dicho esto, puede intentar agregar una cantidad muy grande de swap (digamos 2x o 3x la RAM) y configurarlo /proc/sys/vm/swappinessen un valor bajo, como 1 (tenga en cuenta que con el kernel 3.5+ configurarlo en 0 deshabilita totalmente el swap), de modo que el swap se utiliza sólo si es efectivamente necesario. Esto debería minimizar la paliza.

Respuesta2

No entiendo cómo la gente puede recomendar agregar más RAM o más espacio de intercambio. Una aplicación que se comporta mal puede devorarlo todo y reproducir el problema.

Este tipo de congelaciones son un error arquitectónico grave en el kernel de Linux. La única forma de recuperarse una vez que ocurre la congelación es forzar el OOM con una tecla mágica (alt+sysrq+f). El registro del kernel le dirá más adelante qué se eliminó y por qué.

Varios proyectos están intentando evitar que esto se congele en el espacio de usuario. Véase earlyOOM, por ejemplo.

información relacionada