Tengo una computadora portátil Debian (Buster) con 8 GB de RAM y 16 GB de intercambio. Estoy ejecutando una tarea muy larga. Esto significa que mi computadora portátil se ha dejado encendida durante los últimos seis días mientras se agita.
Mientras hago esto, periódicamente necesito usar mi computadora portátil como computadora portátil. Esto no debería ser un problema; la tarea de larga duración está vinculada a E / S, trabajando a través de cosas en un disco duro USB y no requiere mucha RAM (<200 MB) o CPU (<4%).
El problema es que cuando vuelvo a mi computadora portátil después de unas horas, será muy lenta y puede tardar 30 minutos en volver a la normalidad. Esto es tan malo que los monitores de fallas señalan que sus aplicaciones respectivas se han congelado (especialmente las ventanas del navegador) y las cosas comienzan a fallar de manera incorrecta.
Mirando en el monitor del sistema, de los 2.5 GB utilizados alrededor de la mitad se cambia a intercambio. He confirmado que este es el problema al eliminar el espacio de intercambio ( swapoff /dev/sda8
). Si lo dejo sin espacio de intercambio, vuelve a la vida casi al instante, incluso después de 24 horas. Con el intercambio, es prácticamente un ladrillo durante los primeros cinco minutos que se han dejado solo seis horas. He confirmado que el uso de memoria nunca excede los 3 GB, incluso mientras estoy fuera.
Intenté reducir el intercambio ( ver también: Wikipedia ) a valores de 10
y 0
, pero el problema aún persiste. Parece que después de un día de inactividad, el núcleo cree que toda la GUI ya no es necesaria y la borra de la RAM (la cambia al disco). La tarea de larga duración es leer a través de un gran árbol de archivos y leer cada archivo. Por lo tanto, es posible que el núcleo se confunda al pensar que el almacenamiento en caché ayudaría. Pero en un solo barrido de un USB HD de 2 TB con ~ 1 mil millones de nombres de archivo, un GB de RAM adicional no ayudará mucho al rendimiento. Esta es una computadora portátil barata con un disco duro lento. Simplemente no puede volver a cargar datos en la RAM lo suficientemente rápido.
¿Cómo puedo decirle a Linux que solo use espacio de intercambio en una emergencia? No quiero correr sin intercambio. Si sucede algo inesperado, y el sistema operativo de repente necesita unos pocos GB adicionales, entonces no quiero que se eliminen las tareas y preferiría comenzar a usar el intercambio. Pero por el momento, si dejo el intercambio habilitado, mi computadora portátil simplemente no se puede usar cuando la necesito.
La definición precisa de una "emergencia" podría ser un tema de debate. Pero para aclarar lo que quiero decir: una emergencia sería donde se deja el sistema sin otra opción que intercambiar o matar procesos.
¿Qué es una emergencia? - ¿Realmente tienes que preguntar? ... ¡Espero que nunca te encuentres en un edificio en llamas!
No es posible para mí definir todo lo que podría constituir una emergencia en esta pregunta. Pero, por ejemplo, una emergencia podría ser cuando el núcleo está tan forzado para la memoria que ha comenzado a matar procesos con el OOM Killer . Una emergencia NO es cuando el núcleo cree que puede mejorar el rendimiento mediante el intercambio.
Edición final: he aceptado una respuesta que hace exactamente lo que pedí a nivel del sistema operativo. Los futuros lectores también deben tomar nota de las respuestas que ofrecen soluciones a nivel de aplicación.