Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: https://www.alcancelibre.org/
Licencia de este documento: Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1
© 1999-2022 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector hace mal uso de éstos.
El espacio de memoria de intercambio o Swap es lo que se conoce como memoria virtual. La diferencia entre la memoria real y la virtual es que está última utiliza espacio en la unidad de almacenamiento en lugar de un módulo de memoria. Cuando la memoria real se agota, el sistema copia parte del contenido de esta directamente en este espacio de memoria de intercambio a fin de poder realizar otras tareas.
Utilizar memoria virtual tiene como ventaja el proporcionar la memoria adicional necesaria cuando la memoria real se ha agotado y se tiene que continuar un proceso. Como consecuencia de utilizar espacio en la unidad de almacenamiento como memoria es que es considerablemente más lenta.
¿Cuánto espacio para memoria de intercambio se debe asignar al sistema?
Menos de 1 GB RAM | Doble de la cantidad total de memoria RAM. |
Más de 1 GB RAM | Misma cantidad del total de memoria RAM, más 2 GB. |
Independientemente de la cantidad de memoria RAM disponible, el sistema podrá trabajar normalmente con de 4 a 8 GB de memoria de intercambio, salvo que una aplicación o programa en particular lo requiera. Los programas de instalación de la mayoría de las distribuciones asignan hasta 4 GB si se realiza una instalación predeterminada sin personalizar aún en sistemas con mucha memoria RAM.
Considere incrementar la cantidad de memoria de intercambio en los siguientes casos:
Cambiar el tamaño de las particiones es un método efectivo si hay espacio disponible sin particionar. Sin embargo, representa un riesgo debido a la posibilidad de errores durante el proceso que podría tener como consecuencia la pérdida de datos. Este método requiere disponer de un respaldo de todos los datos importantes antes de comenzar.
Puede utilizar parted o gparted desde un disco vivo.
La mejor solución para un sistema que se está quedando sin memoria disponible siempre será adquirir más RAM.
La sintaxis para dar formato a una partición como memoria de intercambio es mkswap
con la opción -f
para forzar el procedimiento de formato, la opción -c
para buscar, marcar y evitar sectores dañados y el nombre del dispositivo como argumento:
mkswap -f -c [dispositivo]
Asumiendo que dispone de una partición sin utilizar denominada /dev/sde1
, lo siguiente dará formato como memoria de intercambio a la partición /dev/sde1
, forzando el procedimiento y verificando sectores en busca de bloques dañados:
mkswap -f -c /dev/sde1
Lo anterior puede devolver una salida similar a la siguiente:
Setting up swapspace version 1, size=1048576 bytes
no label, UUID=d2fea5ab-c677-8047-789a-e54ae19c506b
Para activar la partición y que sea utilizada inmediatamente por el sistema operativo, se ejecuta swapon
con el nombre de la partición como argumento:
swapon [dispositivo]
En el siguiente ejemplo se activa como partición de memoria de intercambio a la partición /dev/sde1
:
swapon /dev/sde1
Ejecute free para corroborar que nuevo archivo de memoria de intercambio está siendo utilizada por el sistema operativo. La salida puede ser similar a la siguiente:
total used free shared buffers cached
Mem: 321364 312576 8788 0 940 63428
-/+ buffers/cache: 248208 73156
Swap: 1426416 0 1426416
Para que esta partición se utilice como memoria de intercambio automáticamente en el siguiente arranque del sistema, se edita el archivo /etc/fstab
:
vim /etc/fstab
La línea que se deba agregar lleva el siguiente formato:
[partición] swap swap defaults 0 0
En el siguiente ejemplo se definirá como partición de memoria de intercambio a la partición /dev/sde1
:
/dev/sde1 swap swap defaults 0 0
Por lo general un buen administrador siempre dejará espacio sin utilizar en un grupo de volumen. Una ventaja de utilizar volúmenes lógicos consiste en que se pueden agrandar con el sistema en funcionamiento y prescindir de realizar el proceso desde un disco vivo. El siguiente escenario asume que así es y que el volumen lógico utilizado como memoria de intercambio corresponde a /dev/mapper/anfitrion-lv_swap
.
Desactive la partición de memoria de de intercambio:
swapoff /dev/mapper/anfitrion-lv_swap
Ejecute lvextend con la opción -l
usando como argumentos +100%FREE
y el nombre del dispositivo del volumen lógico para hacer que este volumen crezca utilizando el 100% de las extensiones sin utilizar en el grupo de volumen.
lvextend -l +100%FREE /dev/mapper/anfitrion-lv_swap
Vuelva a dar formato como swap
a la partición:
mkswap -f -c /dev/mapper/anfitrion-lv_swap
Active de nuevo la partición de memoria de de intercambio:
swapon /dev/mapper/anfitrion-lv_swap
Este método es idóneo para usuarios poco experimentados. El archivo de memoria de intercambio puede estar en cualquier ruta del sistema de archivos.
Ejecute dd
con if=/dev/zero
, of=/swap
, bs=1024
y count=512000
como argumentos Para crear un
archivo con ceros, denominado /swap y de 524288000 bytes (512 MiB):
dd if=/dev/zero of=/swap bs=1024 count=512000
La salida será similar a la siguiente:
512000+0 registros leídos
512000+0 registros escritos
524288000 bytes (524 MB) copiados, 6.99465 s, 75.0 MB/s
Ejecute mkswap con la opción -f
para forzar el procedimiento de formato, la opción -c
la verificación de sectores y /swap
como argumento para dar formato a este mismo archivo:
mkswap -f -c /swap
La salida será similar a la siguiente:
Setting up swapspace version 1, size = 511996 KiB
no label, UUID=fed2aba5-77c6-4780-9a78-4ae5e19c506b
Para activar la partición y que sea utilizada inmediatamente por el sistema operativo, se ejecuta swapon
con el nombre de la partición o archivo correspondiente como argumento. En el siguiente ejemplo se activa como partición de memoria de intercambio a el archivo /swap
:
swapon /swap
Ejecute free
sin argumentos para corroborar que que hay 512 MiB adicionales de memoria de intercambio. La salida puede ser similar a la siguiente:
total used free shared buffers cached
Mem: 321364 312576 8788 0 940 63428
-/+ buffers/cache: 248208 73156
Swap: 3145724 0 3145724
O bien ejecute swapon
con la opción -s
:
swapon -s
Lo anterior debe devolver una salida similar a la siguiente:
Filename Type Size Used Priority
/dev/dm-2 partition 6336508 44 -1
/swap file 511996 0 20
Para hacer el sistema utilice permanentemente este archivo como memoria de intercambio, edite el archivo /etc/fstab
:
vim /etc/fstab
Añada el siguiente contenido:
/swap swap swap defaults 0 0
El núcleo de Linux permite cambiar con que frecuencia las aplicaciones y programas son movidas de la memoria física hacia la memoria de intercambio a través de un valor que define el peso relativo de uso de está última. Ésto se controla a través del parámetro vm.swappiness
. El valor predeterminado de éste es 60. Un valor 0 desactiva por completo el uso de memoria de intercambio. Un valor 100 haría que el sistema utilice memoria de intercambio de manera agresiva.
Ejecute lo siguiente para corroborar el valor predeterminado:
cat /proc/sys/vm/swappiness
O bien ejecute lo siguiente:
sysctl vm.swappiness
El valor predeterminado fue establecido por los desarrolladores del núcleo de Linux con la finalidad de permitir realizar pruebas y diagnósticos. Es un valor muy elevado para la mayoría de los usos que se le puede dar al sistema operativo. Conviene cambiar este valor por uno más bajo a fin de que el sistema utilice menos la memoria de intercambio y se prefiera reclamar en cambio la memoria cache. Ésta es una clase de memoria RAM estática de acceso aleatorio (SRAM o Static Random Access Memory). Se sitúa entre la Unidad Central de Procesamiento (CPU) y la memoria RAM y se presenta de forma temporal y automática para el usuario proporcionado acceso rápido a los datos de uso más frecuente.
En sistemas de escritorio escritorios se recomienda utilizar un valor entre 10 y 20. Un valor entre 20 y 60 puede mejorar el rendimiento de servidores en general.
En el siguiente ejemplo se aplica el valor 10 para el archivo virtual /proc/sys/vm/swappiness
.
echo 10 > /proc/sys/vm/swappiness
Ejecute sysctl con la opción -w
y vm.swappiness=10
como argumento para hacer lo mismo:
sysctl -w vm.swappiness=10
Lo anterior devuelve una salida similar a la siguiente y que confirma se ha aplicado el cambio:
vm.swappiness = 10
Este cambio en las variables del sistema de forma aplica inmediata hasta el siguiente reinicio del sistema. Para hacer que el cambio sea permanente edite el archivo /etc/sysctl.conf
.
vi /etc/sysctl.conf
Añada la siguiente línea al final del archivo:
vm.swappiness = 10
Lo anterior se puede complementar a través de la opción vm.vfs_cache_pressure
, la cual permitirá liberar parte de la memoria cache. Ésta controla la tendencia con la que el núcleo reclama la memoria utilizada para el cache de directorios e inodos de objetos. Su valor predeterminado es 100 y especifica se intente reclamar las estradas de directorios (dentries) e inodos a una tasa más o menos justa con respecto del reclamo de paginación de memoria cache y la paginación de memoria de intercambio. Disminuir el valor ocasiona que el núcleo prefiera retener las entradas de directorios e inodos en el cache. Incrementar el valor ocasiona que el núcleo prefiera reclamar la memoria utilizada por las entradas de directorios e inodos.
El siguiente ejemplo establece un valor igual a 1000 para vm.vfs_cache_pressure
:
sysctl -w vm.vfs_cache_pressure=1000
Edite el archivo /etc/sysctl.conf
para que el cambio sea permanente:
vi /etc/sysctl.conf
Añada la siguiente línea al final del archivo:
vm.vfs_cache_pressure = 1000
Es posible dar mayor o menos prioridad de uso a los diversos archivos o dispositivos para memoria de intercambio a fin de favorecer aquellos alojados en medios de almacenamiento más rápidos —como unidades SDD tipo SDRAM o bien dispositivos creados con zram. El valor de la prioridad puede ser cualquier número entero entre 0 y 65535. Mientras más alto sea el número, más alta será la prioridad.
Desactive el archivo /swap
ejecutando lo siguiente:
swapoff /swap
Active de nuevo con swapon
con la opción -p
, el número de prioridad deseada entre 0 y 65535 y /swap
como argumento. Ejemplo:
swapon -p 30 /swap
Ejecute swapon
con la opción -s
:
swapon -s
La salida será similar a la siguiente:
Filename Type Size Used Priority
/dev/dm-2 partition 6336508 44 -1
/swap file 511996 0 30
Para hacer permanente el cambio, edite el archivo /etc/fstab
:
vi /etc/fstab
Añada pri=30
a la columna de opciones del archivo o dispositivo de memoria de intercambio. Ejemplo:
/swap swap swap defaults,pri=30 0 0
Reinicie el sistema y haga nuevamente las comprobaciones ejecutando swapon
con la opción -s
.
swapon -s