Durante años he tenido el mismo problema con mis pequeñas configuraciones de Ubuntu: el espacio de intercambio utilizado aumenta con el tiempo. Tengo la impresión de que esto se debe principalmente a que la memoria asignada nunca regresa a la RAM aunque haya suficiente espacio para ello, excepto en el caso de una acción del usuario como deshabilitar el intercambio.
Hice un cron
comando corto para automatizar esto, y tengo buenos resultados:
#! /bin/sh
echo "* */1 * * * root swapoff -a && swapon -a" >> /etc/crontab
Pero debido a que es más un truco que una solución real a este problema, me pregunto por las posibles razones por las que podría ser una mala idea, o ¿cómo podría mejorar este script para hacerlo un poco más inteligente?
Respuestas:
Usarlo así: sí, mal. Realmente necesita verificar si hay suficiente memoria disponible antes de desactivar el intercambio. Consulte /ubuntu//a/90399/15811 para obtener una versión mejor.
Además: ¿estás seguro de esto? El intercambio que se asigna no significa que se utilice el intercambio. El comando
vmstat
, columnassi
(intercambiar) yso
(intercambiar). Si esos permanecen 0 tienes otro problema. En mi experiencia, el intercambio apenas se usa, y es posible que no lo esté usando pensando que no lo vacía, pero no hay nada que vaciar.fuente
vmstat
.Yo diría que es una mala idea. Si crees que tienes memoria libre y un proceso activo no se está moviendo de intercambio a RAM, entonces no tienes tanta memoria libre como crees que tienes, o el proceso no es tan activo como crees es.
Si se continúa intercambiando un proceso activo, debe corregir lo que sea que esté causando presión en la memoria. Si no es un proceso activo, ¿cuál es el problema?
fuente
Es una mala idea.
El núcleo comienza a copiar (no mover) los datos para intercambiarlos mucho antes de que la memoria física esté cerca de estar llena, porque si algún proceso requiere mucha memoria, cualquier página que ya tenga una copia válida en el intercambio puede reutilizarse inmediatamente sin requerir otra escritura al disco
En general, esto ocurre principalmente para páginas a las que no se ha accedido en mucho tiempo, lo que es un buen indicador de que es poco probable que se acceda pronto.
Si descarta explícitamente las copias, eso no aporta ningún beneficio, ya que los datos aún existen en la RAM, pero puede costarle velocidad cuando algún proceso quiere asignar mucha memoria y el intercambio es necesario.
El kernel también utilizará siempre el espacio de intercambio tan pronto como la memoria física esté por encima del 50%, por lo que estos números no serán cero, incluso si tiene suficiente memoria instalada.
fuente
/proc/sys/vm/swappiness
se deja en su valor predeterminado de70
, que es bueno para los servidores y elimina de manera bastante agresiva las páginas sucias de los procesos que no las han tocado durante un tiempo para dejar espacio para más caché de páginas. Esto a menudo es malo para los escritorios porque alt-tab puede ser lento.swappiness=70
), pero la latencia es más importante para la experiencia del usuario en un escritorio. Es una compensación. Si compila rutinariamente cosas que son un poco demasiado grandes para permanecer en el caché de página, entonces, dejeswappiness
un poco más alto, como 20 o 30 en lugar de 5 o 10. Consulte también akitaonrails.com/2017/01/17/optimizing-linux-for -computadoras lentas . Vervm.vfs_cache_pressure
menos de 100 también favorece el almacenamiento en caché de metadatos de inodo / directorio sobre páginas de datos, lo que también es bueno para la capacidad de respuesta de la interfaz de usuario.Esta es una mala idea. Si esto fuera útil, el kernel de Linux lo implementaría de esta manera. No creo que haya una razón para cambiar más que unos pocos parámetros de ajuste, ya que un script de shell tan simple probablemente no sea más inteligente que los algoritmos de los desarrolladores del kernel.
Básicamente tienes dos casos:
Entonces hay dos puntos principales:
A pesar de no tener problemas de falta de memoria con demasiados programas, algunos programas pueden asignar memoria en función de la RAM libre actualmente (tal vez su navegador usará más memoria caché y puede navegar más rápido) y el núcleo puede usar RAM libre para el almacenamiento en caché del disco y optimizaciones similares. Cuando fuerce su intercambio para que esté vacío, el núcleo perderá su caché de lectura y, por ejemplo, comenzar una nueva instancia de Firefox llevará más tiempo que cuando Firefox todavía está en el caché de disco.
Si desea ajustar el comportamiento del kernel, consulte el parámetro de intercambio .
Dos recursos adicionales contribuyen por @ peter-cordes:
Si realmente desea tener un intercambio vacío, puede desactivarlo permanentemente. No veo por qué tenerlo encendido durante una hora y luego vaciarlo tiene ventajas sobre no tener intercambio.
fuente
Puede lograr los mismos resultados diciéndole al núcleo que libere los cachés:
De esta forma, evita el breve momento de posible falta de memoria y deja que el núcleo decida qué es necesario y qué se puede descartar.
fuente
Contrariamente a la idea común, SWAP en sí mismo no es malo .
Lo que realmente ralentiza su sistema es la actividad del núcleo que mueve los datos de la RAM al SWAP y de nuevo a la RAM, el
swappiness
.El sistema hace esto automáticamente ya que está configurado con
swappiness
.Esto hace que la memoria de los procesos inactivos se descargue en la partición de intercambio del disco duro.
Yo mismo trabajé durante años con una máquina que no tenía tanta memoria RAM y siempre usé un poco de memoria SWAP. Aún así, mi máquina funcionó bien hasta que comienzas a mover la memoria de vuelta a la RAM, quizás intentando cerrar una aplicación abierta. Entonces la carga de trabajo comenzó a aumentar.
Más bien, le sugiero que estudie detenidamente qué aplicación usa su memoria en la línea de comando con la
htop
aplicación y decida cerrar alguna aplicación. Tambiéngnome-system-monitor
puede darle una buena idea, en su pestaña de proceso.Si tiene grandes aplicaciones que usan mucha RAM. No los ejecutes todos a la vez.
fuente