>> Technologie Électronique >  >> Maison intelligente >> Vie connectée

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)

  1. 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
  2. Sécuriser les droits (impératif) :
    sudo chmod 600 /swapfile
  3. Formater en swap :
    sudo mkswap /swapfile
  4. Activer immédiatement :
    sudo swapon /swapfile
  5. Vérifier :
    swapon --show + free -h

Rendre permanent (survie au redémarrage)

  1. Éditez `/etc/fstab` :
    sudo nano /etc/fstab
  2. Ajoutez la ligne :
    /swapfile none swap sw 0 0
  3. 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

  1. sudo swapoff /swapfile
  2. Supprimez la ligne dans `/etc/fstab`.
  3. sudo rm /swapfile

Alternatives : partition swap dédiée (si espace disque non partitionné)

  1. `sudo fdisk /dev/sdX` > nouvelle partition > type `82` (Linux swap) > écrire.
  2. `sudo mkswap /dev/sdXn`
  3. `sudo swapon /dev/sdXn`
  4. 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

ProfilRAMSwap fichierzramswappiness
Desktop standard16-32 Go4-8 Go (hibernation = RAM+swap)Oui (zram-config)10-30
Desktop faible RAM4-8 Go8-16 GoOui (priorité haute)10-20
Serveur / DB64 Go+4-8 Go (safety net)Non (latence imprévisible)1-10
Laptop (hibernation)16-32 Go= RAM (pour hibernation)Oui30-60
Embedded / Pi1-4 GoZéro (carte SD)Oui (zram seul)10-60
Vie connectée