Hola Fronters… Espero que estén genial. En este post te explicaré como gestionar eficientemente la memoria SWAP de tu servidor. Generalmente nuestros servidores Linux siempre van a estar a tope de memoria ram y requerimos tener disponibilidad de recursos extras para evitar tener algún tipo de problemas de tipo Out Of Memory, lo que podría convertirse en un verdadero quebradero de cabeza, porque perderíamos información, estabilidad y disponibilidad de nuestros servicios.

Linux, al igual que otros sistemas operativos tienen algo denominado, memoria SWAP o de intercambio, que no es más que un espacio reservado en disco, que nos permite utilizarla en casos en los cuales nuestra memoria ram pueda ser, o bien insuficiente, o también requiramos ejecución de tareas en segundo plano y sea necesario recurrir a este recurso para amortiguar el impacto de la(s) tarea(s) que estamos ejecutando.

Para ello, al instalar nuestro servidor, nos solicita la creación de nuestra memoria swap o área de intercambio, y ya está; pero que pasa si al momento de crear nuestro servidor, hemos reservado una porción insuficiente de espacio, la cual no cumple con los requerimientos mínimos de exigencias para funcionar adecuadamente al llevar a cabo nuestras tareas cotidianas, ¿Deberíamos crear de nuevo el servidor desde cero?, Pues la respuesta es indudablemente No.

Aquí te enseño como hacerlo de una forma rápida y sencilla:

Primeros pasos

Lo primero es irnos a nuestra terminal (como root, claro está), y ejecutar:

fallocate -l 5G /swapadit

Aquí estaremos creando un archivo / fichero swap de unos 5G en la raíz de nuestro sistema, el cual llamaremos swapadit. Lo podemos llamar, como queramos, eso si: un nombre distintivo, que nos permita identificar rápidamente de lo que va.

Ahora, determinaremos el espacio swap a utilizar, así; y recordando que esta cuenta está adaptada para 5G:

dd if=/dev/zero of=/swapadit bs=1024 count=5242880

Si deseas adaptarlo a tu fichero swap, sólo debes realizar este sencillo cálculo, el cual les colocaré en formato pseudocódigo, pero perfectamente transportable a Python, JavaScript o Bash:

sizeSwapFile = (el valor en Gigabytes de tu fichero swap a crear)

TotalBytesSwapFile = sizeSwapFile * 1024 * 1024

# En Python:
print(TotalBytesSwapFile)

# En JavaScript
console.log(TotalBytesSwapFile)

# En Bash:
echo sizeSwapFile = (el valor en Gigabytes de tu fichero swap a crear)

TotalBytesSwapFile = sizeSwapFile * 1024 * 1024

# En Python:
print(TotalBytesSwapFile)

# En JavaScript
console.log(TotalBytesSwapFile)

# En Bash No olvides colocar el encabezado de los scripts en bash '#!/bin/bash':
echo "$TotalBytesSwapFile"

Ahora, asignamos los permisos apropiados para nuestro archivo swap, que serán lectura y escritura para el propietario únicamente:

chmod 600 /swapadit

Una vez teniendo todo creado, utilizaremos la orden mkswap para decirle a nuestro sistema que haga de este fichero un área de intercambio:

mkswap /swapadit

Y por último la activamos con el comando swapon:

swapon /swapadit

Comprobamos si la swap se creó efectivamente:

free -m

Si requerimos desactivarla en algún momento, porque no la necesitamos o si necesitamos vaciarla por alguna razón:

swapoff /swapadit

Declarar nuestra SWAP en el fichero /etc/fstab

Si deseamos que estos cambios sean permanentes y no haya necesidad de rehacer todos los pasos una vez hayamos reiniciado nuestro servidor, solo debemos declarar la existencia de nuestra SWAP en el archivo / fichero /etc/fstab:

/swapadit    none    swap sw 0 0

Y al (re) iniciar nuestro servidor, permanecerán nuestros cambios activos y funcionando.

Configuración de la Swappiness

Swappiness es un valor que es necesario ajustar, con la finalidad de determinar en que casos deseamos que nuestra memoria de intercambio se active en nuestro sistema. Esto quiere decir que, aunque nuestra swap siempre estará activa en el sistema, el valor de la swappiness indicará la prioridad que el sistema dará a la utilización de la misma, por medio del parámetro swapiness y su valor. El fichero que almacena su configuración es el /etc/sysctl.

Básicamente hay dos formas de hacerlo: Al vuelo, o haciendo permanentes dichos cambios.

Lo primero que debemos realizar es verificar la configuración actual:

# El comando regular
sudo sysctl vm.swappiness

# Este nos mostrará solo el valor numérico establecido
cat /proc/sys/vm/swappiness

Esto nos mostrará un valor similar a este:

vm.swappiness = 60

Mientras más alto sea el valor, más intercambio entre la RAM y el disco duro, pudiendo ocasionar alta latencia. A su vez, baja Swappiness puede dar mayor velocidad y performance, pero pudiendo en ocasiones sacrificar la estabilidad del sistema.

Cambiando la Swappiness: temporal y permanentemente

Para hacer un cambio de la swappiness temporalmente, ejecutamos el siguiente comando:

sudo sysctl vm.swappiness = 10

Y ya estaría, con la salvedad de que al momento de reiniciar nuestro servidor, estos cambios se perderían. Si queremos que sean permanentes, lo que debemos hacer es editar nuestro fichero (como root) /etc/systctl y buscar la línea que dice «vm.swappiness = » y reemplazar el valor existente, por el valor que deseamos que tenga:

# Suponiendo que el valor actual del parámetro vm.swappiness es 60
vm.swappiness = 60

# Lo cambiaremos a 10
vm.swappiness = 10

Luego de hacer estos cambios, guardamos, salimos del editor y ejecutamos el siguiente comando:

# Consolidación de los ajustes
sudo sysctl -p

# Lo mismo del anterior, versión explícita
sudo sysctl --system

Y ya hemos realizado los ajustes de SWAP de nuestro servidor de forma eficiente.

Consideraciones adicionales y palabras finales

En la antigüedad (+10 años atrás), se requería que por cada tanto de memoria física (RAM), que tuviese el servidor, la cantidad de swap que le correspondía, debía ser el doble. Esto ha sido derogado, ya no hay esta necesidad, puesto que cada vez más, tanto la tasa de transferencia de las ram actuales como la de los discos duros SSD, e incluso los HDD más recientes, requieren entre casos de uso, menos recurrencia a la swap y/o menos latencia en el sistema, en caso de requerirla. Evalúen sus ajustes en caso de requerirla, de lo contrario, con ajustar la swappiness en 15 es más que suficiente, sobre todo si utilizan dispositivos SSD.

Espero que les haya gustado este nuevo tutorial y nos vemos pronto fronters!!!

Referencias

Webforward.co.uk: Extend the life of your SSD’s by adjusting swappiness in Linux

IBM.com: Linux Systems

Linuxhint: How To Change the Swappiness of Your Linux System

TecAdmin.net: How To Add Swap Space on Debian 11