En mi máquina Debian VM con 512 MB de RAM y 348 MB de intercambio, ¿qué sucederá si abro un archivo de 1 GB en un editor y me quedo sin memoria?
¿Bloqueará el sistema? O si no, ¿cómo manejará Linux esto?
¿No sería prudente instalar Swapspace para que, de ser necesario, se cree suficiente intercambio de forma automática y dinámica?
sudo apt-get install swapspace
memory
swap
out-of-memory
rubo77
fuente
fuente
Respuestas:
Depende de la configuración con la que se esté ejecutando, en particular la sobrecompromiso de memoria (
/proc/sys/vm/overcommit_memory
; verman 5 proc
para más detalles).Si se deshabilita el exceso de memoria, el intento del editor (y posiblemente otros programas que intenten al mismo tiempo) intentar asignar memoria fallará. Obtendrán un resultado de falla de la llamada al sistema. Depende de cada programa manejar esto, aunque un resultado desafortunadamente común es que el programa se bloquee. El editor también puede, por ejemplo, simplemente negarse a abrir el archivo.
Si el exceso de memoria está habilitado, entonces la llamada del sistema que solicita memoria puede tener éxito. En ese caso, cuando se accede realmente a la memoria, el núcleo notará que no tiene memoria y eliminará un proceso para recuperar la memoria. Ese proceso puede o no ser el editor. La elección se rige por
oom_score
(el resultado de varias heurísticas del núcleo) yoom_score_adj
(configurada) de cada proceso en el sistema. Esos también están en esa página de manual de proc (5).fuente
Hay un gran problema en Linux en este caso si te acercas a la condición de falta de memoria: notarás que todo tu sistema deja de responder porque comienza a intercambiarse mucho. Incluso el cursor del mouse puede volverse tan 'lento' que no puede iniciar un terminal y eliminar manualmente un proceso ofensivo de comedor de memoria. Esto se debe a la gran cantidad de operaciones de disco.
Para evitar esta situación, personalmente normalmente desactivo completamente el intercambio, por lo que el kernel de Linux siempre responde y, en el peor de los casos, el asesino de falta de memoria (OOM) matará algún proceso. La lógica de qué proceso es eliminado por OOM depende de la versión del kernel.
Entonces la respuesta es no: no habilite la asignación dinámica de intercambio. Te enfrentarás a la máquina se cuelga.
Es fácil probarlo con un programa que asigna constantemente algo de memoria en un bucle. Guarde este programa en un archivo de texto
memeater.c
:Luego compílalo:
y correr:
Pruébelo con swap, sin swap y con su asignación dinámica de swap.
Además, tenga en cuenta que, en la mayoría de los casos, esta condición de OOM se debe a un error en el software (pérdida de memoria) o ha hecho algo incorrecto como "cargar este archivo de 10 GB en el editor" o "ejecutar demasiados tamaños de archivos gráficos en paralelo" y hacer La conclusión: ¿Necesita intercambio o no?
fuente