Tutoriales de VPS
Cómo optimizar VPS de poca memoria con ZRAM y Swap (2026): evitar OOM, lentitud y agitación del disco
En VPS de poca memoria 1C1G y 1C2G que ejecutan WordPress, Docker o bases de datos, el problema más común no es la falta de CPU, sino la presión de memoria persistentemente alta, que finalmente activa el OOM Killer o la agitación de swap. Este artículo explica claramente las diferencias entre ZRAM, swapfile y zswap, ofrece pasos de configuración directamente ejecutables para Debian/Ubuntu, y cubre swappiness, prioridades, monitoreo y métodos de reversión.

Cómo optimizar VPS de poca memoria con ZRAM y Swap (2026): evitar OOM, lentitud y agitación del disco
Muchos VPS baratos son 1C1G o 1C2G. Justo después de instalar el sistema parecen suficientes, pero una vez que se ejecutan Nginx, PHP-FPM, MySQL, Redis, Docker o copias de seguridad programadas al mismo tiempo, la memoria se llena rápidamente. Los síntomas típicos son: SSH se vuelve lento, el sitio web ocasionalmente devuelve 502, la base de datos es eliminada, los contenedores Docker salen sin razón, y en dmesg todavía se puede ver Out of memory: Killed process.
En este punto, decir "simplemente añade más memoria" es por supuesto correcto, pero no siempre es realista. Para VPS anuales de bajo costo, máquinas de prueba, blogs pequeños y servicios API ligeros, un enfoque más práctico es: usar ZRAM para comprimir la memoria fría de antemano, y luego mantener un pequeño swapfile como respaldo. Esto no convertirá 1GB de memoria en 4GB, pero puede reducir significativamente la probabilidad de OOM y dar al sistema espacio de amortiguación durante picos cortos de memoria.
| Escenario | Recomendación |
|---|---|
| VPS de poca memoria 1GB / 2GB | Habilitar ZRAM primero, luego añadir un pequeño swapfile como respaldo |
| Bases de datos, PHP-FPM con picos ocasionales | ZRAM es muy adecuado, reduce el OOM causado por picos cortos |
| Escasez real de memoria a largo plazo | ZRAM solo mitiga; en última instancia hay que reducir el uso de la configuración o actualizar la memoria |
| I/O de disco ya alto | No depender de un swapfile grande, o empeorará la agitación del disco |
| VPS SSD barato | Un swapfile está bien, pero no lo trates como memoria de ejecución a largo plazo |
En pocas palabras: ZRAM es un "búfer de memoria comprimida", swapfile es un "respaldo en disco". El primero es rápido, el segundo es lento; el primero es más adecuado para el búfer diario en VPS de poca memoria, el segundo para evitar que el sistema se bloquee instantáneamente.
No te apresures a cambiar la configuración. Usa los siguientes comandos para confirmar el cuello de botella actual:
free -h
vmstat 1 10
swapon --show
journalctl -k --since "24 hours ago" | grep -i "out of memory\|killed process"
Céntrate en tres cosas:
availablepermanece muy bajo durante mucho tiempo, por ejemplo, solo quedan unas decenas de MB.si/soenvmstattiene valores continuamente, lo que indica que el sistema está intercambiando frecuentemente.- Los registros del kernel muestran
Killed process, lo que indica que el OOM Killer ya ha actuado.
Si la memoria solo tiene picos ocasionales, ZRAM es muy adecuado; si está haciendo swap todo el día, no es un problema de ajuste sino un desajuste entre la configuración de la aplicación o las especificaciones de la máquina.
Muchos tutoriales mezclan estos conceptos, pero en realidad no son lo mismo.
- ZRAM: Crea un dispositivo de bloque comprimido en memoria; los datos intercambiados todavía residen en memoria pero ocupan menos espacio después de la compresión. Es rápido y adecuado para VPS de poca memoria.
- Swapfile: Usa un archivo de disco como espacio de intercambio. Las ventajas son simplicidad y fiabilidad; las desventajas son lentitud y fácil agitación de I/O de disco.
- Zswap: Una caché comprimida a nivel de kernel, a menudo utilizada como capa de compresión antes del swap en disco. Es más de bajo nivel, pero el costo de solución de problemas y explicación es mayor.
Para la mayoría de los usuarios de VPS Debian/Ubuntu, la solución preferida es: ZRAM + pequeño swapfile. Esto proporciona tanto velocidad como un respaldo final.
La forma más sencilla en Debian y Ubuntu es instalar zram-tools:
sudo apt update
sudo apt install -y zram-tools
Edita el archivo de configuración:
sudo nano /etc/default/zramswap
Se recomienda comenzar con una configuración conservadora:
ALGO=zstd
PERCENT=75
PRIORITY=100
Si tienes 1GB de memoria, PERCENT=75 creará aproximadamente un dispositivo ZRAM de 768MB; si tienes 2GB, aproximadamente 1.5GB. No configures 200% o 300% de inmediato; la compresión no es magia gratuita, y la CPU y la gestión de memoria también tienen costos.
Reinicia el servicio y verifica:
sudo systemctl restart zramswap
zramctl
swapon --show
Si ves /dev/zram0 con una prioridad mayor que el swap normal, ZRAM está habilitado.
Incluso con ZRAM habilitado, sigo recomendando mantener un pequeño swapfile. La razón es simple: cuando la memoria comprimida también está llena, el sistema todavía tiene un búfer final y no matará procesos directamente.
Crear un swapfile de 1GB:
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Escribir en /etc/fstab:
echo '/swapfile none swap sw,pri=10 0 0' | sudo tee -a /etc/fstab
El pri=10 aquí es clave: haz que su prioridad sea menor que ZRAM. El sistema usará ZRAM primero y solo recurrirá al swap en disco bajo mayor presión.
Verificar prioridades:
swapon --show
Deberías ver ZRAM con mayor prioridad y swapfile con menor prioridad.
vm.swappiness determina con qué agresividad Linux usa swap. El swap tradicional en disco generalmente recomienda un valor más bajo, como 10 o 20. Pero ZRAM es rápido, y si se configura demasiado bajo, el sistema podría esperar hasta cerca del OOM antes de intercambiar.
Para VPS de poca memoria con ZRAM habilitado, recomiendo comenzar así:
sudo sysctl vm.swappiness=100
Escribir configuración persistente:
echo 'vm.swappiness=100' | sudo tee /etc/sysctl.d/99-zram-swap.conf
sudo sysctl --system
Si encuentras que la CPU es débil y la compresión añade carga extra, puedes bajar a 60; si los picos de memoria son frecuentes y la CPU todavía tiene margen, prueba 120. No copies ciegamente un valor fijo; la clave es observar el estado real después de los cambios.
Después de la configuración, usa los siguientes grupos de comandos para observar durante 1-2 días:
free -h
zramctl
swapon --show
vmstat 1 10
journalctl -k --since "24 hours ago" | grep -i "out of memory\|killed process"
En circunstancias normales, quieres ver:
- Datos comprimidos en
zramctl, pero no persistentemente 100% llenos. swapfilerara vez usado, o solo brevemente durante picos.si/soenvmstatsin picos persistentes.- Sin registros de OOM Killer en las últimas 24 horas.
Si ZRAM está persistentemente lleno y el swapfile también sigue creciendo, la máquina es genuinamente insuficiente. Continuar añadiendo swap solo hará que el sitio web sea más lento; el enfoque correcto es reducir el uso del servicio o actualizar la configuración.
Incorrecto. Configurar 8GB de swap en un VPS de poca memoria a menudo solo convierte "procesos siendo eliminados" en "toda la máquina congelándose". El swap es un respaldo, no una expansión de memoria.
ZRAM es un dispositivo de swap comprimido en memoria que desaparece después del reinicio, pero el swap nunca fue almacenamiento persistente de todos modos. Los datos de tu negocio deben estar en disco, en bases de datos y en copias de seguridad, no dependiendo del swap.
ZRAM solo mitiga la presión; no puede reemplazar el ajuste de aplicaciones. El búfer de MySQL, los workers de PHP-FPM, los límites de memoria de Node.js y los límites de contenedores Docker deben considerarse juntos.
| Memoria VPS | Tamaño ZRAM | swapfile | swappiness | Notas |
|---|---|---|---|---|
| 512MB | 50%-75% RAM | 512MB | 80-100 | Solo adecuado para servicios muy ligeros |
| 1GB | 75%-100% RAM | 1GB | 100 | Punto de partida recomendado para blogs pequeños, APIs ligeras |
| 2GB | 75% RAM | 1-2GB | 80-100 | Adecuado para WordPress + base de datos pequeña |
| 4GB+ | 50% RAM | 1-2GB | 60-100 | Más para prevención de picos, no una dependencia central |
Si encuentras que el uso de CPU aumenta o la latencia empeora después de la configuración, puedes revertir directamente.
Deshabilitar ZRAM:
sudo systemctl stop zramswap
sudo systemctl disable zramswap
Eliminar swapfile:
sudo swapoff /swapfile
sudo rm /swapfile
sudo nano /etc/fstab
Solo elimina la línea /swapfile de /etc/fstab.
Para VPS de poca memoria, la estrategia más confiable no es simplemente "habilitar swap" sino un enfoque de tres pasos:
- Usar ZRAM para manejar picos de memoria a corto plazo.
- Usar un pequeño swapfile como respaldo final.
- Usar límites a nivel de servicio para controlar el uso residente de MySQL, PHP-FPM y Docker.
Si solo tienes OOM ocasionalmente, esta solución suele ser muy efectiva; si tu negocio depende del swap para mantenerse vivo a largo plazo, es hora de actualizar la memoria o dividir la base de datos. El objetivo de la optimización no es hacer que el VPS nunca reporte errores, sino hacerlo estable, observable y reversible bajo una carga razonable.