La verdad es que configurar correctamente la memoria SWAP en un servidor siempre ha sido importante, sobre todo porque normalmente necesitamos que nuestras páginas web tengan un 100 % de uptime: tienen que estar siempre disponibles, y tener suficiente memoria RAM y un buen SWAP en un disco SSD se hace imprescindible para evitar los pérfidos errores OOM (sin memoria), que provocan que el servidor web no muestre las páginas correctamente a tus usuarios.
¿Sigue siendo verdad que utilizar memoria SWAP es malo para el hardware, para el disco SSD al aumentar las escrituras y lecturas en el mismo? Creo que no tanto como cuando aparecieron los primeros SSD. Ahora mismo los SSD han mejorado en rendimiento, fabricación y vida útil, y al final vamos a necesitar muchos más años en notar como el disco duro se va degradando. Probablemente, el disco falle por otra razón y haya que cambiarlo.
Aun así, proveedores de hospedaje web VPS como Digital Ocean, no recomiendan su uso intensivo: Aunque el SWAP se recomienda generalmente para los sistemas que utilizan discos duros giratorios tradicionales, el uso de SWAP con discos SSD puede causar problemas con la degradación del hardware con el tiempo. Debido a esta consideración, no recomendamos habilitar SWAP en DigitalOcean o en cualquier otro proveedor que utilice almacenamiento SSD. Hacerlo puede afectar la fiabilidad del hardware subyacente para ti y tus vecinos. Si necesita mejorar el rendimiento de su servidor, te recomendamos que actualices tu Droplet. Esto conducirá a mejores resultados en general y disminuirá la probabilidad de contribuir a los problemas de hardware que pueden afectar a su servicio.
Vamos, se están cubriendo las espaldas, e intentando que la vida útil de sus discos sea la mayor posible, porque eso va a repercutir en un coste a su negocio. Estoy de acuerdo en que la memoria SWAP se use lo menos posible: para ello hay que optimizar el uso de nuestras aplicaciones en el servidor e incluso decirle a nuestro sistema Linux que no use prioritariamente esta memoria y que prefiera la RAM, pero tampoco veo que la solución sea siempre dar más dinero a nuestro proveedor de alojamiento aumentando el coste de nuestro plan. El dinero no cae de los árboles para nadie.
Por eso, probablemente cuando has lanzado por primera vez tu servidor al mundo, la partición SWAP sea inexistente o muy pequeña, por ejemplo de 512 MB. Vamos a tener que ajustarlo. Se puede hacer de dos maneras, creando o aumentando la partición SWAP (tienes que redimensionar tus pariciones y crear una específica para SWAP), o utilizando una SWAP File (más sencillo de implementar, más flexible, y no hace falta parar el servidor).
En mi caso particular, tengo una partición SWAP, que es lo que recomienda el creador de Linux, Linus Torvalds: es más eficiente y da menos problemas.
- Te puede interesar: Cómo quitamos el acceso root en Rocky Linux 9 o Cómo instalar Rclone en Rocky Linux 9
Partición SWAP vs. SWAP File
Característica | Partición SWAP | Archivo SWAP |
---|---|---|
Configuración Inicial | Ventaja: Configuración directa durante la instalación del sistema operativo. Desventaja: Requiere particionar el disco, lo cual puede ser complejo si no se hace desde el principio. | Ventaja: Fácil de configurar y ajustar, sin necesidad de particionar el disco. Desventaja: Requiere comandos adicionales para configurar y activar. |
Flexibilidad | Desventaja: Difícil de modificar una vez establecida. | Ventaja: Muy flexible, fácil de redimensionar o mover según las necesidades. |
Rendimiento | Ventaja: Puede ofrecer un rendimiento ligeramente mejor en algunos casos, debido a la dedicación exclusiva de la partición para el intercambio. | Desventaja: Ligera penalización en el rendimiento en comparación con una partición dedicada, pero generalmente insignificante en la práctica. |
Espacio en Disco | Desventaja: El espacio está reservado y no se puede utilizar para otros fines, incluso si no se usa todo el tiempo. | Ventaja: El espacio del archivo SWAP puede ser reutilizado o ajustado según sea necesario. |
Seguridad | Ventaja: Más seguro porque es menos probable que se vea afectado por cambios en el sistema de archivos del usuario. | Desventaja: Puede ser menos seguro si no está adecuadamente protegido, ya que reside en el sistema de archivos regular. |
Fragmentación | Ventaja: No se fragmenta, porque es una partición fija. | Desventaja: Puede fragmentarse, lo que podría afectar ligeramente el rendimiento. |
Requisitos del Sistema | Desventaja: Requiere acceso a particionado de disco, que puede no estar disponible en todos los entornos. | Ventaja: No necesita acceso especial al particionado de disco, por lo que es más fácil de implementar en sistemas en producción. |
Creamos una partición SWAP al crear nuestro servidor
La opción más recomendable. Cuando vas a generar tu imagen de Rocky Linux en el plan de tu nuevo servidor, aprovecha y crea la partición SWAP en el panel de control de tu proveedor de alojamiento. Es lo más sencillo. Te va a dar la opción. Mientras el sistema operativo de instalar en una partición tipo ext4, te dara la opción de generar otra partición SWAP. En mi caso, en Linode (Akamai), puedes consultar las opciones en Storage dentro de tu Linode. Yo tengo 8 GB de SWAP porque tengo una memoria RAM de 16 GB:
¿Puedes cambiar el tamaño de esta partición si aumentas de memoria RAM con el paso del tiempo? Sí, pero tienes que parar el servidor, y proceder al cambio de tamaño de ambas particiones. En mi caso, que tengo 320 GB de almacenamiento, tengo 319488 MB para Rocky Linux, y 8192 MB para el SWAP. En principio, no hay pérdida de datos, por lo menos en Linode: solo tienes que asegurarte de tener suficiente espacio libre en el disco duro (compruébalo con df -h).
Solo te tienes que preocupar de acertar con el tamaño adecuado de la partición. ¿Qué tamaño recomienda Red Hat para RHEL (Rocky Linux, Alma Linux y demás)?
RAM en tu sistema | SWAP recomendado |
---|---|
⩽ 2 GB | 2 veces la cantidad de RAM |
> 2 GB – 8 GB | Igual a la cantidad de RAM |
> 8 GB – 64 GB | Al menos 4 GB |
> 64 GB | Al menos 4 GB |
Una regla general, por encima de 8 GB de RAM, es multiplicar tu memoria RAM por 0.5. En mi caso, 16 GB x 0.5 = 8 GB. ¿Por qué he elegido 8 GB y no 4 GB? Bueno, porque tengo suficiente espacio en el disco del servidor, y porque me parece un valor razonable si estoy usando un servidor LAMP con WordPress. Me convencieron en este artículo: https://opensource.com/article/19/2/swap-space-poll.
Después de crear la partición SWAP, iniciar o reiniciar tu servidor, prueba el comando:
swapon -s
Te dice el tamaño, cuanto está siendo usada, el tipo y la prioridad. Como solo tengo una partición SWAP, la prioridad da un poco igual.
¡Ojo! Si ya tienes creado el servidor, asegúrate de tener o no una Partición SWAP con el comando free -h (o con swapon –show):
Vale, ya tenemos memoria SWAP en nuestro servidor. A lo mejor ahora nos interesa, si tenemos suficiente memoria RAM en el sistema, decirle a Rocky Linux que no use esa memoria RAM si hay memoria RAM disponibles. Eso lo podemos conseguir editando el archivo sysctl.conf:
sudo vi /etc/sysctl.conf
y añadiendo las siguientes líneas:
vm.swappiness = 10
vm.vfs_cache_pressure = 50
vm.swappiness básicamente controla cuando se mandan procesos a la memoria SWAP. Si prefieres usar memoria RAM, lo mejor es que este valor este bajo.
- vm.swappiness = 0 # El intercambio está desactivado.
- vm.swappiness = 1 # Cantidad mínima de intercambio sin desactivarlo por completo.
- vm.swappiness = 10 # Este valor se recomienda para mejorar el rendimiento cuando existe suficiente memoria.
- vm.swappiness = 60 # El valor predeterminado.
- vm.swappiness = 100 # Se incrementa de forma agresiva.
vm.vfs_cache_pressure configura cuánta información elegirá el sistema almacenar en caché (inode y dentry). El valor por defecto suele ser 100.
- Valor predeterminado (100): el kernel recuperará la memoria de la caché VFS a una tasa estándar en relación con la recuperación de la caché de páginas y la caché de intercambio.
- Valores más altos (>100): aumenta la presión sobre la caché VFS, haciendo que el kernel sea más agresivo al recuperar la memoria utilizada por la caché VFS.
- Valores más bajos (<100): reducen la presión sobre la caché VFS, lo que provoca que el kernel retenga las cachés de directorios e inodos por períodos más largos. Mejora el rendimiento al reducir el número de veces que se necesita recargar la información de los metadatos.
Ajustando estos dos parámetros, nos quedamos más tranquilos sabiendo que nuestro servidor intentara siempre usar preferentemente la memoria RAM frente a la SWAP. Es como dar un poco de cariño a nuestro disco SSD.
Después de guardar el cambio en el archivo con ESC :wq!, tienes que aplicarlo al servidor:
sudo sysctl -p
- Tienes más detalles del proceso en Mejorando la seguridad y rendimiento del Kernel en Rocky Linux 9
Todo esto que te he contado está muy bien si puedes cambiar el tamaño de la partición de tu servidor, pero, ¿Y si no tienes acceso a esta opción? Pues tienes que usar las SWAP File.
Yo también probé a usar esta opción en conjunción con la partición SWAP, pero al final la borre y use solo la partición por simplicidad. ¿Puedes tener una partición SWAP y una SWAP File al mismo tiempo? Sí. Pero soy partidario de mantener las cosas lo más simples posible. Si vas a tener dos particiones, asegúrate de asignar bien la prioridad de uso.
Creamos una SWAP FILE en nuestro servidor
Esta opción es más flexible porque podemos cambiar su tamaño al vuelo y activarla o desactivarla sin necesidad de reiniciar el servidor. En este caso lo he hecho en mi servidor VPS de Hetzner que tiene 8 GB de RAM. Vamos a ver cómo se hace:
#Verificamos que SWAP tenemos.
sudo swapon --show
#Creamos una SWAP de 4 GB y le asignamos los permisos correctos.
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
#Comprobamos el tamaño y la asignación de permisos
ls -lh /swapfile
-rw------- 1 root root 4.0G May 28 17:06 /swapfile
#Le decimos al sistema que esa zona es SWAP
sudo mkswap /swapfile
Setting up swapspace version 1, size = 4 GiB (4589930496 bytes) no label, UUID=
#Activamos la meoria SWAP en el sistema y comprobamos que esta activada
sudo swapon /swapfile
sudo swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 4G 3.7G -2
#Comprobamos la amoria del sistema
free -h
total used free shared buff/cache available
Mem: 7.3Gi 4.9Gi 2.5Gi 14Mi 1.3Gi 2.4Gi
Swap: 4.0Gi 3.7Gi 321Mi
#Hacemos el cambio permanente despues de reinicios editando /etc/fstab con la linea /swapfile none swap sw 0 0
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
¿Comandos útiles para controlar el uso de memoria SWAP?
grep '^Swap' /proc/meminfo
sar -S 2 3
cat /proc/swaps
¿Has cambiado de idea y quieres quitar esta SWAP File de tu servidor? Puedes hacerlo de manera sencilla:
#apagamos la SWAP
sudo swapoff /swapfile
#Quitamos del archivo fstab la linea /swapfile none swap sw 0 0
sudo vi /etc/fstab
/swapfile none swap sw 0 0
#Borramos swapfile
sudo rm /swapfile
- Te puede interesar: Cómo optimizar el valor de innodb_buffer_pool_size en tu bbdd