A veces trabajo con grandes descargas de datos que quiero guardar en la memoria para su procesamiento. A veces calculo mal la cantidad de memoria que producirá mi programa, o un depurador multiplica el uso de memoria por un factor que excede mi memoria disponible.
Cada vez que comienzo un proceso que requiere mucha memoria, esto es lo que esperaría de un sistema operativo sano: intente consumir toda la memoria libre, luego pida a otros procesos no esenciales que renuncien a la memoria que no necesitan, y luego escribe para intercambiar.
Esto es lo que Ubuntu hace por mí: comer toda la memoria libre, luego pedirle al sistema operativo que intercambie todos los servicios esenciales (sesión de gnome, terminal, teclado), luego congelar y esperar a que desconecte el cable de alimentación.
Dos preguntas:
- ¿Cómo puede suponer un sistema operativo que cualquier cosa puede ser tan importante que está bien dejar de escuchar la entrada del usuario?
- ¿Cómo puedo decirle a Ubuntu que nunca intercambie servicios esenciales y que siempre reaccione a la entrada del usuario, incluso si algún proceso estúpido intenta consumir más recursos de los que proporciona el sistema?
swapon
para averiguarlo)? Saludos, Alswappiness
configuración a 10, es decir:vm.swappiness = 10
en /etc/sysctl.conf. Busque aquí el intercambio para obtener más información al respecto. 2) Si el intercambio no ayuda ... Aunque es posible que no desee ... aumentar el tamaño de su archivo de intercambio a 1.5x16G y ver si eso ayuda. Mantenme informado. Saludos, Alvm.swappiness=10
necesita AGREGARSE a sysctl.conf. Una persona experimentada podría incluso usar el comando sysctl sobre la marcha, para configurar vm.swappiness = 10, sin editar el archivo sysctl.conf. Saludos, Al ps: esperando que el OP responda.Respuestas:
Todavía no tengo una solución para el problema, pero puedo ofrecer dos soluciones que pueden ser de interés para otros:
1) temprano
Es un servicio que vigila el uso de memoria y mata el proceso que consume la mayor cantidad de memoria cuando se alcanza un cierto umbral (vea también esta y esta pregunta sobre el asesino OOM en el kernel de Linux)
Lo probé con un proceso de demostración que solicita memoria de forma indefinida en pequeños fragmentos. Aquí está mi primera impresión: cuando comienzo el proceso malicioso, rápidamente se come toda mi RAM. Luego comienza el intercambio, el sistema se vuelve receptivo. Unos segundos después, el sistema vuelve a estar en línea. El registro de earlyoom muestra que mató el proceso de comer memoria después de que tanto la memoria como el uso de intercambio alcanzaron el 90%.
Todavía hay un retraso molesto cuando comienza el intercambio y después de que se cancela el proceso, algunas partes de otros procesos generalmente permanecen en el intercambio hasta que se solicitan, pero es un comienzo.
2) solo deshabilita el intercambio
Sé que este es un tema controvertido , pero para el propósito de los sistemas de escritorio y especialmente las máquinas de desarrollo donde puede ocurrir de vez en cuando que un proceso intente consumir toda su memoria, tiene sentido: sin intercambio, el asesino OOM simplemente funciona Como era la intención. Cuando te quedas sin memoria, encuentra el mejor proceso para matar y se deshace de él. Sin retraso, sin demora.
Puede deshabilitar el intercambio para la sesión actual con
sudo swapoff -a
o hacer que el cambio sea permanente .La solución adecuada para el problema sería, por supuesto, que el sistema permanece receptivo cuando la memoria principal se agota y comienza a intercambiar memoria como si no hubiera un mañana, pero eso no parece suceder pronto.
fuente
Pruebe una de dos cosas:
1) cambie la configuración de intercambio de su configuración predeterminada de 60 a 10, es decir: agregue vm.swappiness = 10 a /etc/sysctl.conf (en terminal, escriba
sudo gedit /etc/sysctl.conf
), luego reinicie el sistema. Busque aquí el intercambio para obtener más información al respecto.2) Si el intercambio no ayuda ... a pesar de que es posible que no desee ... aumentar el tamaño de su archivo de intercambio a 1.5x16G y ver si eso ayuda.
Mantenme informado. Saludos, Al
fuente
top
matar el cerdo de la memoria). Después de un minuto más o menos, el proceso se mata. No es perfecto, pero nos estamos acercando.Resolví un problema similar. No sé si mi experiencia puede ser adecuada para ti ...
Recientemente he publicado una guía sobre cómo instalar Linux en dispositivos LVM loopback que se inician desde USB (por lo que sin tener que instalar grub en el disco interno, dejándolo como original). Aquí está la guía: https://github.com/DareDevil73/linux-on-loopback-usb .
Luego caí en el problema de congelación en la carga de memoria alta y observé un uso anormal del espacio de intercambio (toda la RAM consumida, y el uso de intercambio cerca de cero). Obviamente, la partición de intercambio LVM estaba montada y funcionaba correctamente, pero no sé por qué el núcleo no la usó como se esperaba.
Intenté una solución alternativa. He creado un archivo de bucle invertido de intercambio (no LVM) y la congelación se ha ido. ¡Ahora el archivo de intercambio se usa como debería ser, y el sistema operativo nunca se congela!
Mire https://github.com/DareDevil73/linux-on-loopback-usb#known-issues para obtener más información.
fuente