Comment augmenter la mémoire virtuelle (swap) sous Linux
Sous Linux, la mémoire virtuelle = **RAM + swap** (partition ou fichier). Si la RAM est saturée, le noyau déplace les pages peu utilisées vers le swap. Si le swap est plein : OOM Killer tue des processus. Pour augmenter le swap sans repartitionner (risque perte données), créez un **fichier d'échange (swap file)**.
Vérifier l'existant
free -h # RAM + swap total/utilisé/libre
swapon --show # fichiers/partitions swap actifs
lsblk -f # partitions, UUID, FSTYPE
df -h / # espace libre sur / (où créer le fichier)
Créer un fichier swap (exemple : 4 Go)
- Créer le fichier (pré-alloué, contigu, rapide) :
sudo fallocate -l 4G /swapfile
Si `fallocate` non supporté (btrfs, ZFS, NFS) :
sudo dd if=/dev/zero of=/swapfile bs=1M count=4096 status=progress - Sécuriser les droits (impératif) :
sudo chmod 600 /swapfile - Formater en swap :
sudo mkswap /swapfile - Activer immédiatement :
sudo swapon /swapfile - Vérifier :
swapon --show+free -h
Rendre permanent (survie au redémarrage)
- Éditez `/etc/fstab` :
sudo nano /etc/fstab - Ajoutez la ligne :
/swapfile none swap sw 0 0 - Testez le montage :
sudo swapoff -a && sudo swapon -a(pas d'erreur = OK).
Ajuster l'agressivité du swap (vm.swappiness)
- Valeur 0-100 (défaut 60). **Plus bas = swap moins agressif** (garde plus en RAM).
- Serveur / Desktop réactif : **10-30** (ex. `vm.swappiness=10`).
- Base de données / charge mémoire prévisible : **1-10**.
- Modification temporaire : `sudo sysctl vm.swappiness=10`
- Modification permanente :
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.d/99-swappiness.conf
sudo sysctl --system
Ajuster la pression cache (vfs_cache_pressure)
- Défaut 100. **Plus haut = récupère plus vite le cache dentry/inode** (métadonnées FS).
- Pour desktop : **50-100**. Pour serveur fichiers : **100-200**.
- Permanent :
echo 'vm.vfs_cache_pressure=50' | sudo tee -a /etc/sysctl.d/99-cache-pressure.conf
Supprimer un fichier swap
sudo swapoff /swapfile- Supprimez la ligne dans `/etc/fstab`.
sudo rm /swapfile
Alternatives : partition swap dédiée (si espace disque non partitionné)
- `sudo fdisk /dev/sdX` > nouvelle partition > type `82` (Linux swap) > écrire.
- `sudo mkswap /dev/sdXn`
- `sudo swapon /dev/sdXn`
- Ajoutez dans `/etc/fstab` : `UUID=xxxx none swap sw 0 0` (UUID via `blkid`).
Swap sur SSD / NVMe : usure ?
Moderne SSD (TLC/QLC, contrôleur moderne, TRIM actif) : **swap fichier/partition est sûr**. L'usure est négligeable vs durée de vie (TBW). Assurez-vous que `fstrim.timer` est actif (`systemctl status fstrim.timer`) — hebdomadaire par défaut. Évitez swap sur carte SD / clé USB bas de gamme (pas de TRIM, usure rapide).
zram / zswap : compression RAM (alternative/ complément au swap disque)
- zram : périphérique bloc en RAM compressé (LZ4/ZSTD). Très rapide, pas d'I/O disque. Idéal : RAM limitée (≤ 8 Go), embarqué, conteneurs. Ubuntu 20.04+ : `sudo apt install zram-config` (auto). Fedora 33+ : activé par défaut.
- zswap : cache compressé *devant* le swap disque (kernel param `zswap.enabled=1`). Nécessite swap disque backend.
- Vérifiez : `cat /proc/swaps` (zram apparaît comme `/dev/zram0`).
Recommandations par profil
| Profil | RAM | Swap fichier | zram | swappiness |
|---|---|---|---|---|
| Desktop standard | 16-32 Go | 4-8 Go (hibernation = RAM+swap) | Oui (zram-config) | 10-30 |
| Desktop faible RAM | 4-8 Go | 8-16 Go | Oui (priorité haute) | 10-20 |
| Serveur / DB | 64 Go+ | 4-8 Go (safety net) | Non (latence imprévisible) | 1-10 |
| Laptop (hibernation) | 16-32 Go | = RAM (pour hibernation) | Oui | 30-60 |
| Embedded / Pi | 1-4 Go | Zéro (carte SD) | Oui (zram seul) | 10-60 |
