Saltar a contenido

Configurar swap y zram en Linux

Cuando un servidor se queda sin RAM, el kernel recurre al swap para seguir funcionando. Sin una buena configuración, eso puede provocar caídas de rendimiento o incluso la terminación de procesos.

Qué hace

Se configuran dos mecanismos complementarios:

  • zram — swap comprimido en memoria RAM, para reducir el uso de swap en disco.
  • Swapfile — red de seguridad adicional en disco por si la RAM se agota.

zram

Instalar

  1. Comprobar si ya está instalado:

    dpkg -l | grep zram-tools
    
    rpm -qa | grep zram-tools
    
  2. Instalar:

    sudo apt install zram-tools
    
    sudo dnf install zram-tools
    

Configurar

  1. Editar la configuración:

    sudo vim /etc/default/zramswap
    

    Contenido (ajustar PERCENT según el análisis):

    ALGO=zstd
    PERCENT=50
    

     

    A diferencia de sshd_config.d/, sysctl.d/ o limits.d/, /etc/default/ no tiene mecanismo de drop-ins: zramswap no busca fragmentos adicionales, así que este es el único fichero de configuración que soporta el paquete — no hay forma de hacerlo en uno nuevo sin tocar este. Es la misma excepción que unattended-upgrades en el paso anterior.

    sudo vim /etc/systemd/zram-generator.conf.d/00-zram.conf
    

    Contenido (ajustar zram-size según el análisis):

    [zram0]
    compression-algorithm = zstd
    zram-size = ram / 2
    

     

    Fedora usa zram-generator, un generador de unidades de systemd. La configuración vive en /etc/systemd/zram-generator.conf.d/ y sí soporta drop-ins — puedes añadir más ficheros .conf sin tocar el original. La sintaxis es distinta de Ubuntu: zram-size admite expresiones como ram / 2 o un porcentaje fijo.

Verificar

  1. Aplicar y confirmar que zram está activo:

    sudo service zramswap restart
    sudo zramctl
    

     

    zramctl vive en /usr/sbin, que no está en el PATH de un usuario normal — de ahí el sudo.

Swap

Usa el swapfile como red de seguridad adicional en disco. Analiza el disco y la RAM para decidir el tamaño del swapfile:

df -h /
free -h

Instalar

  1. Comprobar si ya hay swap configurado:

    sudo swapon --show
    sudo systemctl list-units --type swap
    

     

    swapon también vive en /usr/sbin — hace falta sudo para encontrarlo como usuario normal. Este list-units y los systemctl daemon-reload/enable de abajo se quedan como systemctl: listar unidades o activarlas en el arranque son cosas que service no sabe hacer (solo envuelve start/stop/restart/reload/status).

  2. Si no hay, crear el swapfile (ajustar tamaño 2G según el análisis):

    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    

Configurar

  1. Crear una unidad de systemd para activarlo en el arranque:

    sudo vim /etc/systemd/system/swapfile.swap
    

    Contenido:

    [Unit]
    Description=Swapfile
    
    [Swap]
    What=/swapfile
    
    [Install]
    WantedBy=multi-user.target
    
  2. Activar y arrancar la unidad:

    sudo systemctl daemon-reload
    sudo systemctl enable --now swapfile.swap
    
  3. Ajustar swappiness (priorizar RAM/zram sobre el swapfile) con un drop-in propio:

    sudo vim /etc/sysctl.d/99-swap.conf
    

    Contenido:

    vm.swappiness=10
    

    Aplicar:

    sudo sysctl --system
    

    📝 Nota

    No todo se pudo sacar a fichero nuevo del todo "gratis" — la unidad swapfile.swap necesita systemctl daemon-reload para que systemd la detecte, y depende de que el servidor use systemd (estándar en Ubuntu, pero no universal). Si en algún momento tuvieras que volver al método clásico de /etc/fstab, sería la única excepción real a la convención de "solo ficheros nuevos" de esta guía.

Verificar

  1. Confirmar que el swap está activo y la unidad corriendo:

    sudo swapon --show
    sudo systemctl status swapfile.swap
    

     

    swapfile.swap es una unidad de tipo .swap, no .serviceservice no la reconoce, así que aquí también se queda systemctl.

Y ahora qué

El swap está optimizado: zram aligera la carga en RAM y el swapfile actúa como red de seguridad en disco. El siguiente paso es instalar un agente de Monitorización para detectar problemas de carga o memoria.