¿Cómo vaciar el intercambio si hay RAM libre?

253

Cuando abro una aplicación intensiva de RAM (VirtualBox configurada a 2 GB de RAM), generalmente se utiliza espacio de intercambio, dependiendo de qué más haya abierto en ese momento.

Sin embargo, cuando dejé esa última aplicación, los 2GB de RAM se liberaron, pero el uso del mismo espacio de intercambio permanece.

Por ejemplo, en este momento, unas dos horas después de haber cerrado VirtualBox, tengo 1.6GB de RAM libre y todavía 770MB en intercambio.

¿Cómo puedo decirle a Ubuntu que deje de usar ese intercambio y volver a usar la memoria RAM?

    
pregunta jfoucher 06.08.2010 - 06:43

6 respuestas

146

Solo porque se asigna el intercambio, no significa que se esté 'utilizando'. Si bien los programas como el monitor del sistema y la parte superior mostrarán parte de su espacio de intercambio asignado (en su ejemplo, 770 MB), eso no significa que el sistema esté intercambiando / deshabilitando activamente.

Para saber si algo se está intercambiando, puede usar el comando vmstat . Deje que se ejecute durante unos segundos para establecerse y observar las columnas si (swapin) y so (swapout). Si nada está sucediendo, entonces no hay razón para preocuparse.

Aquí está el resultado de ejecutar vmstat 1 , donde se puede ver que mi máquina no se está intercambiando en absoluto.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

Sin embargo, aquí en top puede ver que tengo espacio de intercambio asignado: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
    
respondido por el popey 06.08.2010 - 10:04
347

El kernel de Linux que subyace en Ubuntu automáticamente "intercambiará" esas páginas del disco a la RAM, según sea necesario, así que, en general, diría que simplemente deje que ocurra de manera natural.

Sin embargo, si realmente siente que necesita forzarlo (puedo ver un escenario en el que le gustaría saber que el sistema responderá más adelante), puede desactivar y volver a habilitar Momentáneamente.

sudo swapoff -a
sudo swapon -a

O alternativamente como un solo comando

swapoff -a && swapon -a

Tenga cuidado al hacer esto, ya que puede hacer que su sistema sea inestable, especialmente si ya tiene poca memoria RAM.

    
respondido por el SpamapS 06.08.2010 - 06:47
119

También puede establecer su valor de "swappiness" del valor predeterminado de 60, de esta manera, el intercambio no crecerá tanto como para empezar. Por qué el valor predeterminado de envío se establece en 60 cuando el valor recomendado es 10 me deja perplejo. del Ubuntu SwapFAQ :

  

La configuración predeterminada en Ubuntu es swappiness = 60. Reducir el valor predeterminado de swappiness probablemente mejore el rendimiento general de una instalación típica de escritorio de Ubuntu. Se recomienda un valor de swappiness = 10 , pero no dude en experimentar.

Al cambiar este valor a 10 o incluso a 0, puede agregar un aumento significativo y perceptible de la velocidad a un sistema anterior con un disco lento. Establecer este valor en 0 no desactiva el intercambio para Linux kernel 3.4 y siguientes, pero con 3.5+ lo hace, por lo que querrá usar un valor de 1 si desea mantenerlo en su configuración más baja *.

No veo ninguna razón para no configurar esto en 0, ya que cualquier cosa que llegue al disco es más lenta que la RAM. Tengo 8 núcleos virtuales, un SSD rápido y amp; 8 GB de memoria y mi swap está configurado en 0. A partir de este momento tengo 3 máquinas virtuales en ejecución, mi uso de memoria es 7.1 de 7.7 GB, mi swap usado está solo a 576KB de 952MB y todos los sistemas funcionan sin problemas.

Del Ubuntu SwapFAQ :

  

El parámetro swappiness controla la tendencia del núcleo a mover los procesos fuera de la memoria física y hacia el disco de intercambio. Debido a que los discos son mucho más lentos que la RAM, esto puede conducir a tiempos de respuesta más lentos para el sistema y las aplicaciones si los procesos se sacan de la memoria demasiado agresivamente.

     
  1. swappiness puede tener un valor de entre 0 y 100
  2.   
  3. swappiness = 0 le dice al kernel que evite intercambiar procesos fuera de la memoria física durante el mayor tiempo posible
  4.   
  5. swappiness = 100 le dice al kernel que cambie de forma agresiva los procesos de la memoria física y los mueva al caché de intercambio
  6.   

A continuación, se incluyen las instrucciones básicas para verificar swappiness, vaciar el swap y cambiar el swappiness a 0:

Para verificar el valor de swappiness:

cat /proc/sys/vm/swappiness

Para establecer temporalmente swap en 0 ( según lo sugerido por SpamapS ):

Esto vaciará su intercambio y transferirá todo el intercambio a la memoria. Primero asegúrese de tener suficiente memoria disponible al ver la pestaña de recursos de gnome-system-monitor, su memoria libre debe ser mayor que su swap usado. Este proceso puede tardar un tiempo, use gnome-system-monitor para monitorear y verificar el progreso.

sudo swapoff --all

Para establecer el nuevo valor en 0:

sudo sysctl vm.swappiness=0 

Para volver a activar el intercambio:

sudo swapon --all

Para establecer de forma permanente el swappiness en 0:

  1. sudoedit /etc/sysctl.conf
  2. Agregue esta línea vm.swappiness = 0
  3. sudo shutdown -r now # restart system

* Con la configuración de kernel 3.5+, la configuración de swappiness a 0 lo desactiva por completo y se recomienda una configuración de 1 si desea el algoritmo de swappiness más bajo. fuente: enlace

    
respondido por el Elijah Lynn 11.06.2012 - 14:10
46

Descubrí que vaciar intercambio puede ayudar mucho en sistemas con discos lentos y RAM limitada. Por supuesto, como ya se mencionó, la forma de hacerlo es ejecutar sudo swapoff -a; sudo swapon -a . El problema aquí es que si no hay suficiente RAM, hacerlo causará todo tipo de problemas.

Escribí un guión al que llamo toggle_swap que me ha funcionado durante los últimos años. Comprueba suficiente RAM libre antes de deshabilitar realmente el intercambio. Aquí está:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print }')"
buffers="$(echo "$mem_data" | awk '{print }')"
cache="$(echo "$mem_data" | awk '{print }')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print }')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
    
respondido por el Scott Severance 25.12.2011 - 16:35
23

Después de rebuscar con Swappiness durante un par de días, llegué a la conclusión de que el kernel debería ser dejado en sus propios dispositivos. Sabe lo que está haciendo, y está optimizado para brindarte la mejor experiencia.

A menos que tengas una buena razón para querer recuperar ese disco, lo dejaría.

    
respondido por el Erigami 06.08.2010 - 16:34
1

No afecta el rendimiento si el espacio de intercambio está ocupado. La única penalización de rendimiento es que las cosas entran y salen del intercambio. Si no se intercambia nada, no debe preocuparse por nada.

    
respondido por el Rory 11.08.2010 - 19:35

Lea otras preguntas en las etiquetas