Swap, zram e zswap: la memoria virtuale spiegata bene su un server moderno

Published on 19/07/2026 Linux

Lo swap ha una reputazione ingiustamente negativa — "se il server usa lo swap è già nei guai" — che nasce da un'epoca in cui i dischi erano rotativi e lenti. Su hardware moderno, e soprattutto con le varianti compresse in RAM come zram, lo swap resta uno strumento utile per gestire picchi di memoria senza dover per forza dimensionare il server sul caso peggiore assoluto.

Swap tradizionale: un file (o partizione) su disco

Il meccanismo classico: quando la RAM fisica si esaurisce, il kernel sposta su disco le pagine di memoria usate meno di recente, liberando RAM per ciò che serve subito. Su un file invece che su una partizione dedicata:

sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Il limite di questo approccio su SSD/NVMe moderni non è tanto la lentezza (comunque più lenta della RAM, ma non drammaticamente come sui vecchi dischi meccanici), quanto l'usura: scritture frequenti su swap accorciano la vita utile di un SSD economico, un dettaglio da considerare su hardware di fascia bassa o VPS con storage limitato.

zram: swap compresso, dentro la RAM stessa

zram crea un dispositivo di swap virtuale che vive interamente in RAM, comprimendo i dati al volo. Il vantaggio: essendo comunque RAM (solo più lenta perché compressa/decompressa al volo), è ordini di grandezza più veloce di qualunque disco, e non consuma cicli di scrittura su SSD. Su Ubuntu 22.04+ è spesso già configurato di default; per attivarlo manualmente:

sudo apt install zram-tools
echo 'ALGO=zstd' | sudo tee -a /etc/default/zramswap
echo 'PERCENT=50' | sudo tee -a /etc/default/zramswap   # % della RAM fisica da dedicare
sudo systemctl restart zramswap

Con compressione tipica 2:1 o 3:1 (dipende dai dati), un dispositivo zram da 2GB può effettivamente contenere 4-6GB di dati "virtuali" — un guadagno reale su VPS economiche con RAM limitata.

zswap: una via di mezzo, cache compressa davanti allo swap su disco

zswap non sostituisce lo swap su disco, ma si frappone come cache compressa: le pagine da spostare in swap vengono prima compresse in RAM; solo quando anche quella cache si riempie, i dati (ancora compressi o decompressi a seconda della configurazione) finiscono davvero sul disco di swap. È il compromesso giusto quando vuoi comunque avere swap su disco come rete di sicurezza per picchi importanti, ma minimizzare le scritture reali nella maggior parte dei casi quotidiani:

# verifica se è già attivo
cat /sys/module/zswap/parameters/enabled

# abilitalo al boot via parametro kernel (GRUB)
# aggiungi zswap.enabled=1 a GRUB_CMDLINE_LINUX in /etc/default/grub
sudo update-grub

Quale scegliere

ScenarioScelta consigliata
VPS/container con poca RAM, nessun disco persistente lento da preservarezram da solo
Server con SSD, vuoi rete di sicurezza per picchi rari senza usurare il disco nell'uso normalezswap + swap su disco
Desktop/laptop con RAM abbondante (16GB+)swap minimo o assente, serve solo per ibernazione

Un parametro spesso mal configurato: swappiness

Il valore vm.swappiness (0-100) determina quanto aggressivamente il kernel preferisce spostare pagine in swap rispetto a liberare cache. Il default (60) è pensato per desktop generici; su un server con carico di lavoro prevedibile spesso conviene abbassarlo:

sudo sysctl vm.swappiness=10   # temporaneo
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf   # persistente

Un valore basso dice al kernel "usa lo swap solo quando è davvero necessario, preferisci tenere la RAM libera per la cache dei file" — generalmente il comportamento desiderato su un server applicativo.