Optimiza el rendimiento: Configuración combinada SWAP + ZRAM en Rocky Linux 9

Actualizada:

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.

Pero es que ahora también tenemos que configurar la memoria ZRAM (swap en RAM comprimida), que va a comprimir las páginas de memoria inactivas en la RAM misma, reduciendo el uso del SWAP en disco (más lento).

ZRAM vs. SWAP

Lo mejor que puedes hacer es combinar ZRAM y swap en tu servidor VPS. ZRAM actúa como la primera línea de defensa, utilizando la propia RAM física para crear un espacio de intercambio comprimido. Cuando la presión sobre la memoria de tu servidor supera lo que ZRAM puede manejar, el kernel recurre al swap tradicional.

¿Clave para un buen rendimiento? Ajustar el parámetro vm.swappiness para que el kernel sea más propenso a usar primero ZRAM, y luego dimensionar correctamente cada componente: ZRAM entre el 50 % y 100 % del tamaño de la RAM, y un swap en disco modesto pero suficiente que actúe como colchón para emergencias (dependiendo de la cantidad de RAM que tengas).

AspectoZRAM (Swap en RAM)Swap (disco)
UbicaciónRAM física comprimidaDisco (HDD/SSD/NVMe)
VelocidadMuy rápidaDepende del almacenamiento. Mejor en discos Nvme.
Consumo CPUModeradoMínimo
Capacidad típica50-100% del tamaño de RAM1-2× tamaño de RAM (histórico)
Ventaja principalEvita I/O de disco en picos de memoriaRespaldo ilimitado
Desventaja principalCapacidad limitada por RAMMás lenta
Impacto en SSDNinguno (no escribe en disco)Desgaste por escrituras
Configuración en Rocky 9Paquete: zram-generator
Algoritmo: zstd
fallocate/mkswap
Archivo o partición
Parámetro clavecompression-algorithm
zram-size
swappiness (bajo para solo swap)
Caso de uso idealServidor web, aplicaciones, ContainerBases de datos grandes, procesos estables

¿Activar la memoria SWAP en un servidor es malo para el SSD o NVMe?

¿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 para notar cómo 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.

Cómo creamos memoria SWAP en un servidor VPS

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 particiones y crear una específica para SWAP desde el panel de control de tu proveedor VPS), o utilizando un SWAP File (más sencillo de implementar, más flexible, y no hace falta parar el servidor).

Partición SWAP vs. SWAP File

CaracterísticaPartición SWAPArchivo SWAP
Configuración InicialVentaja: 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.
FlexibilidadDesventaja: Difícil de modificar una vez establecida.Ventaja: Muy flexible, fácil de redimensionar o mover según las necesidades.
RendimientoVentaja: 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 DiscoDesventaja: 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.
SeguridadVentaja: 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ónVentaja: No se fragmenta, porque es una partición fija.Desventaja: Puede fragmentarse, lo que podría afectar ligeramente el rendimiento.
Requisitos del SistemaDesventaja: 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.

1.-Creamos una partición SWAP al crear nuestro servidor.

La opción más recomendable (si te deja el panel de administración de tu VPS). 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 se va a instalar en una partición tipo ext4, te dará 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:

Partición SWAP en Linode con Rocky Linux en etx4

¿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 sistemaSWAP recomendado
⩽ 2 GB2 veces la cantidad de RAM
> 2 GB – 8 GBIgual a la cantidad de RAM
> 8 GB – 64 GBAl menos 4 GB
> 64 GBAl 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
Partición SWAP en mi Linode

Te dice el tamaño, cuánto 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):

Partición SWAP creada en mi liode con sus capcidad en GB

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 cuándo 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

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.

2.-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 (luego pasé la SWAP a 8 GB porque cambié a un servidor de 16 GB de RAM). Vamos a ver cómo se hace:

Creamos una SWAP FILE en nuestro servidor
#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

Cómo creamos memoria ZRAM en un servidor VPS

Ahora tenemos que crear la memoria ZRAM. Vamos a intentar que todo pase primero por la ZRAM , que es más rápida, y que el servidor solo use SWAP en caso de emergencia (muchas visitas). En mi caso, en Rocky Linux 9, he tenido que hacer lo siguiente:

ZRAM y SWAP en mi servidor en Hetzner.
#Instalo el paquete necesario
sudo dnf install zram-generator -y

#archivo de configuración inicial. Lo editamos.
sudo nano /etc/systemd/zram-generator.conf.d/zram-generator.conf

Muy importante. Al principio no me funcionaba la ZRAM. Tenía que meter archivo de configuración en el directorio zram-generator.conf.d, que no existía (hay que crearlo). Si no metes el archivo allí, no te va a funcionar.

¿Qué ponemos en zram-generator.conf? Lo siguiente:

[zram0]
# Tamaño de zRAM: 50% de la RAM total
zram-size = ram / 2

# Algoritmo de compresión recomendado para VPS
compression-algorithm = lzo-rle

# Prioridad alta para que se use antes de la swap en disco
swap-priority = 100

Y luego activo ZRAM en el servidor:

sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0.service

Una vez activada la ZRAM y el SWAP, debemos volver a cambiar las optimizaciones del Kernel. Editamos con sudo nano /etc/sysctl.conf


# Optimización para zRAM y swap
vm.swappiness = 80
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0

Y activamos con: sudo sysctl -p

Comandos que te pueden interesar:

# Ver eficiencia continua
watch -n 5 'zramctl; echo "---"; free -h'

#vemos el estado de zram
systemctl status systemd-zram-setup@zram0.service

#Reinicio
systemctl restart swap-create@zram0.service

Conclusión

Gracias a la combinación de ZRAM y SWAP, vas a conseguir el mejor rendimiento en tu servidor. Probablemente solo hayas configurado la SWAP. No está mal. Pero puede mejorar tu servidor web si le regalas un poco de memoria ZRAM. Compruébalo tú mismo. Ya verás cómo vas a evitar los temidos OOM (Out Of Memory).

Foto del autor de algoentremanos.com Ivan Benito

Ivan Benito

Apasionado de la lectura, los viajes y la privacidad online. Experto en tecnología, SEO y WordPress desde 2007.

Si tienes preguntas, quieres que haga una review de una app, programa o producto, simplemente mándame un e-mail [contacto]. En Algoentremanos.com comparto mis opiniones personales sobre productos y servicios. Algunas reseñas pueden generar ingresos a través de enlaces afiliados, pero siempre pruebo todo a fondo y solo recomiendo lo que de verdad me gusta [saber más].

Suscríbete y recibe los mejores tutoriales de servidores, VPN y Linux

Accede a guías prácticas, tutoriales paso a paso y recomendaciones esenciales para administrar tus sistemas y aprender tecnologías de forma segura y efectiva.

Quiero acceso a los tutoriales

📩 Sin spam. Solo contenido útil.

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.