Le swap est un espace disque utilisé comme extension de la RAM. Ce guide explique comment le configurer et l'ajuster sous Linux pour tirer le meilleur parti de la mémoire système.
Qu'est-ce que le Swap ?
Définition Simple
Le swap (espace d'échange) est une partie du disque dur utilisée comme mémoire virtuelle quand la RAM physique est pleine.
Analogie : La RAM est votre bureau de travail, le swap est une étagère à côté. Quand votre bureau est plein, vous mettez temporairement des documents sur l'étagère (plus lent d'accès, mais permet de continuer à travailler).
Comment Fonctionne le Swap
┌─────────────────────────────────────────┐
│ RAM (8 GB) │
│ ┌──────────────────────────────────┐ │
│ │ Processus actifs │ │
│ │ - Firefox : 2 GB │ │
│ │ - Chrome : 1.5 GB │ │
│ │ - IDE : 1 GB │ │
│ │ - Système : 3 GB │ │
│ │ Total utilisé : 7.5 GB │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
↓ RAM pleine !
┌─────────────────────────────────────────┐
│ SWAP (4 GB sur disque) │
│ ┌──────────────────────────────────┐ │
│ │ Pages mémoire inactives │ │
│ │ - Onglets Firefox pas utilisés │ │
│ │ - Processus en veille │ │
│ │ Utilisé : 1.2 GB │ │
│ └──────────────────────────────────┘ │
└─────────────────────────────────────────┘
Quand Utiliser le Swap ?
Scénarios où le swap est utile :
- RAM limitée (moins de 8 GB)
- Workstation avec beaucoup d'applications
- Serveur avec pics de charge occasionnels
- Hibernation (suspend-to-disk)
- Sécurité : éviter OOM killer
Scénarios où le swap est moins utile :
- Serveur avec RAM abondante (32+ GB)
- Applications critiques temps réel
- SSD de faible endurance
Vérifier Configuration Swap Actuelle
Commandes de Base
# Voir swap actif
swapon --show
# NAME TYPE SIZE USED PRIO
# /swapfile file 2G 0B -2
# Alternative
free -h
# total used free shared buff/cache available
# Mem: 7.7Gi 2.1Gi 3.2Gi 156Mi 2.4Gi 5.2Gi
# Swap: 2.0Gi 0B 2.0Gi
# Détails swap
cat /proc/swaps
# Filename Type Size Used Priority
# /swapfile file 2097148 0 -2
# Utilisation mémoire complète
vmstat 1
# Colonne 'si' = swap in (KB/s)
# Colonne 'so' = swap out (KB/s)
Comprendre les Valeurs
# Si 'so' (swap out) > 0 de façon continue
# → Système manque de RAM, swap activement
# Si 'si' (swap in) élevé
# → Processus réactivent données swappées (lent)
# Voir processus qui swappent
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | grep -v "0 kB" | sort -k2 -n -r | head -10
Créer du Swap
Méthode 1 : Partition Swap
Avantages : Performance légèrement meilleure, dédié
Inconvénients : Nécessite partition libre, taille fixe
# Lister partitions
sudo fdisk -l
# Créer partition avec fdisk
sudo fdisk /dev/sda
# Dans fdisk :
# n (nouvelle partition)
# p (primaire)
# Taille : +4G (exemple)
# t (changer type)
# 82 (Linux swap)
# w (écrire et quitter)
# Créer système de fichiers swap
sudo mkswap /dev/sda3
# Activer swap
sudo swapon /dev/sda3
# Vérifier
swapon --show
# Rendre permanent dans /etc/fstab
echo '/dev/sda3 none swap sw 0 0' | sudo tee -a /etc/fstab
Méthode 2 : Fichier Swap (Recommandé)
Avantages : Flexible, redimensionnable, pas besoin partition
Inconvénients : Légère surcharge performance (négligeable)
# Créer fichier 4 GB
sudo fallocate -l 4G /swapfile
# Alternative si fallocate pas disponible
# sudo dd if=/dev/zero of=/swapfile bs=1M count=4096
# Permissions strictes (sécurité)
sudo chmod 600 /swapfile
# Vérifier
ls -lh /swapfile
# -rw------- 1 root root 4.0G
# Créer système swap
sudo mkswap /swapfile
# Activer
sudo swapon /swapfile
# Vérifier activation
swapon --show
free -h
# Rendre permanent
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Redimensionner Fichier Swap
# Désactiver swap actuel
sudo swapoff /swapfile
# Supprimer ancien
sudo rm /swapfile
# Créer nouveau (8 GB)
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Vérifier
free -h
Configuration Swappiness
Consultez notre guide sur le tuning des paramètres kernel avec sysctl pour une optimisation complète.
Qu'est-ce que Swappiness ?
swappiness contrôle l'agressivité du kernel pour swapper des pages mémoire.
Valeurs :
- 0 : Swap seulement en dernier recours
- 60 : Défaut (équilibre)
- 100 : Swap agressivement
Voir Swappiness Actuel
cat /proc/sys/vm/swappiness
# 60 (défaut)
Modifier Swappiness
Temporaire (test) :
# Swappiness conservateur (serveur)
sudo sysctl vm.swappiness=10
# Swappiness agressif (desktop)
sudo sysctl vm.swappiness=60
Permanent :
# Éditer sysctl.conf
sudo nano /etc/sysctl.conf
# Ajouter
vm.swappiness=10
# Appliquer
sudo sysctl -p
Recommandations Swappiness
| Type Système | Swappiness | Raison |
| Serveur web/DB | 1-10 | Minimiser latence |
| Serveur général | 10-20 | Équilibre |
| Desktop/Laptop | 60 | Défaut OK |
| Workstation RAM supérieure à 16 GB | 10 | Peu de swap nécessaire |
Exemple serveur web :
# Configuration optimale serveur web
vm.swappiness=10
vm.vfs_cache_pressure=50
Zswap : Swap Compressé en RAM
Qu'est-ce que Zswap ?
zswap compresse les pages avant de les swapper sur disque. Gain : 2-3x de capacité effective.
Sans zswap :
RAM pleine → Écriture directe sur disque (lent)
Avec zswap :
RAM pleine → Compression en RAM (rapide)
→ Si toujours plein → Disque
Activer Zswap
# Vérifier si déjà actif
cat /sys/module/zswap/parameters/enabled
# Y = activé, N = désactivé
# Activer temporairement
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
# Activer au boot
# Éditer GRUB
sudo nano /etc/default/grub
# Ajouter à GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash zswap.enabled=1"
# Mettre à jour GRUB
sudo update-grub # Debian/Ubuntu
sudo grub2-mkconfig -o /boot/grub2/grub.cfg # RedHat/CentOS
# Reboot
sudo reboot
Configuration Zswap Avancée
# Voir configuration
grep -r . /sys/module/zswap/parameters/
# Algorithme compression (défaut: lzo)
echo lz4 | sudo tee /sys/module/zswap/parameters/compressor
# lz4 = plus rapide, lzo = bon compromis, zstd = meilleure compression
# Pourcentage RAM pour zswap (défaut: 20%)
echo 25 | sudo tee /sys/module/zswap/parameters/max_pool_percent
# Activer/désactiver
echo 1 | sudo tee /sys/module/zswap/parameters/enabled
Configuration optimale (GRUB) :
GRUB_CMDLINE_LINUX_DEFAULT="quiet zswap.enabled=1 zswap.compressor=lz4 zswap.max_pool_percent=25"
Zram : Swap Compressé Pure RAM
Zram vs Zswap
| Feature | Zram | Zswap |
| Backend | RAM uniquement | RAM + disque |
| Vitesse | Très rapide | Rapide |
| Use case | RAM limitée, SSD protégé | Serveur général |
Installer Zram
# Installer
sudo apt install zram-config # Ubuntu
sudo yum install zram # CentOS
# Ou script manuel
sudo modprobe zram
# Créer device zram
sudo zramctl --find --size 2G --algorithm lz4
# Créer swap dessus
sudo mkswap /dev/zram0
sudo swapon /dev/zram0 -p 100 # Priorité haute
# Vérifier
swapon --show
# NAME TYPE SIZE USED PRIO
# /dev/zram0 partition 2G 0B 100
Configuration Zram Automatique
# /etc/systemd/system/zram.service
[Unit]
Description=Swap with zram
After=multi-user.target
[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/sh -c 'modprobe zram && echo lz4 > /sys/block/zram0/comp_algorithm && echo 2G > /sys/block/zram0/disksize && mkswap /dev/zram0 && swapon /dev/zram0 -p 100'
ExecStop=/usr/bin/sh -c 'swapoff /dev/zram0'
[Install]
WantedBy=multi-user.target
# Activer
sudo systemctl enable zram.service
sudo systemctl start zram.service
Priorité Swap
Comprendre Priorités
Le système utilise swap avec priorité la plus haute en premier.
# Voir priorités
swapon --show
# NAME TYPE SIZE USED PRIO
# /swapfile file 2G 0B -2
# /dev/sda3 partition 4G 0B -1
# Priorité : -2 à 32767
# Plus haut = utilisé en premier
Configurer Priorités
# Activer avec priorité spécifique
sudo swapon /swapfile -p 10
sudo swapon /dev/sda3 -p 5
# Dans /etc/fstab
/swapfile none swap sw,pri=10 0 0
/dev/sda3 none swap sw,pri=5 0 0
# Maintenant swapfile utilisé avant partition
Use case priorités :
- Zram (priorité 100) → Très rapide
- SSD swap (priorité 10) → Rapide
- HDD swap (priorité 1) → Lent, dernier recours
Hibernation (Suspend to Disk)
Configurer Hibernation
Hibernation nécessite swap ≥ RAM.
# Taille swap pour hibernation
# Si RAM = 8 GB → swap minimum 8 GB
# Trouver UUID swap
sudo blkid | grep swap
# /dev/sda3: UUID="abc123..." TYPE="swap"
# Éditer GRUB
sudo nano /etc/default/grub
# Ajouter resume
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=abc123..."
# Update GRUB
sudo update-grub
# Installer pm-utils
sudo apt install pm-utils
# Tester hibernation
sudo systemctl hibernate
Fichier Swap et Hibernation
Plus complexe car nécessite offset.
# Trouver offset fichier swap
sudo filefrag -v /swapfile | head -n 4
# Physical offset : 123456
# GRUB
GRUB_CMDLINE_LINUX_DEFAULT="resume=/dev/sda1 resume_offset=123456"
Monitoring et Diagnostics
Pour analyser les logs du système, découvrez notre guide sur l'analyse des logs Linux avec journalctl.
Voir Utilisation Swap
# Vue globale
free -h
# Par processus
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{print ""}' $file
done | sort -k2 -n -r | head
# Graphique (si sysstat installé)
sar -S 1 10
# Affiche swap usage toutes les secondes
# htop avec colonne swap
htop
# F2 → Columns → SWAP → F10
Diagnostiquer Problèmes Swap
# Swap utilisé alors que RAM libre ?
# Mauvais signe, vérifier swappiness
free -h
# total used free
# Mem: 8Gi 3Gi 4Gi ← RAM libre
# Swap: 2Gi 500Mi 1.5Gi ← Swap utilisé quand même
# Solution
sudo sysctl vm.swappiness=10
# Forcer libération swap (si RAM dispo)
sudo swapoff -a && sudo swapon -a
Alertes Swap
# Script monitoring swap
#!/bin/bash
SWAP_USED=$(free | grep Swap | awk '{print $3/$2 * 100}')
THRESHOLD=80
if (( $(echo "$SWAP_USED > $THRESHOLD" | bc -l) )); then
echo "WARNING: Swap usage ${SWAP_USED}% > ${THRESHOLD}%"
# Envoyer alerte
mail -s "Swap Alert" admin@example.com <<< "Swap at ${SWAP_USED}%"
fi
Optimisations Avancées
Cache Pressure
Contrôle agressivité récupération cache.
# Voir valeur actuelle
cat /proc/sys/vm/vfs_cache_pressure
# 100 (défaut)
# Optimisation serveur
# Conserver cache plus longtemps
sudo sysctl vm.vfs_cache_pressure=50
# Permanent
echo "vm.vfs_cache_pressure=50" | sudo tee -a /etc/sysctl.conf
Dirty Ratio
Contrôle quand flush cache disque.
# Paramètres dirty
sysctl -a | grep dirty
# Optimisation SSD
sudo sysctl vm.dirty_ratio=10
sudo sysctl vm.dirty_background_ratio=5
# Permanent
cat <<EOF | sudo tee -a /etc/sysctl.conf
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.dirty_expire_centisecs=3000
vm.dirty_writeback_centisecs=500
EOF
Transparent Huge Pages (THP)
Pour des optimisations complètes des paramètres kernel, consultez notre guide sur le tuning sysctl.
# Voir statut
cat /sys/kernel/mm/transparent_hugepage/enabled
# [always] madvise never
# Désactiver (recommandé DB)
echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
# Permanent (GRUB)
GRUB_CMDLINE_LINUX_DEFAULT="quiet transparent_hugepage=never"
Configuration par Type de Serveur
Serveur Web (Nginx/Apache)
# /etc/sysctl.conf
vm.swappiness=10
vm.vfs_cache_pressure=50
vm.dirty_ratio=10
vm.dirty_background_ratio=5
# Swap : 2-4 GB suffisant
# Priorité performance réseau sur swap
Serveur Base de Données
# Configuration DB (MySQL/PostgreSQL)
vm.swappiness=1 # Minimum swap
vm.vfs_cache_pressure=50
vm.overcommit_memory=2 # Pas d'overcommit
vm.overcommit_ratio=80
# Désactiver THP
transparent_hugepage=never
# Swap : Égal RAM ou 0 si RAM > 32GB
Desktop/Workstation
# Configuration desktop
vm.swappiness=60 # Défaut OK
vm.vfs_cache_pressure=100
# Zswap activé
zswap.enabled=1
zswap.compressor=lz4
# Swap : 4-8 GB
Désactiver Swap
Temporairement
# Désactiver tout swap
sudo swapoff -a
# Réactiver
sudo swapon -a
# Désactiver swap spécifique
sudo swapoff /swapfile
Définitivement
# Désactiver
sudo swapoff -a
# Supprimer de /etc/fstab
sudo sed -i '/swap/d' /etc/fstab
# Supprimer fichier
sudo rm /swapfile
# Ou partition
sudo fdisk /dev/sda
# Supprimer partition swap
Benchmarking Swap
Tester Performance
# Test écriture swap
time dd if=/dev/zero of=/swapfile bs=1M count=1024
# Test avec stress
sudo apt install stress-ng
# Remplir RAM + swap
stress-ng --vm 4 --vm-bytes 8G --timeout 60s
# Observer
watch -n 1 'free -h && swapon --show'
Comparer Configurations
# Scénario 1 : Sans swap
swapoff -a
# Lancer workload
# Mesurer performance
# Scénario 2 : Swap swappiness=60
swapon -a
sysctl vm.swappiness=60
# Lancer workload
# Scénario 3 : Swap swappiness=10
sysctl vm.swappiness=10
# Lancer workload
# Scénario 4 : Zswap
# Activer zswap
# Lancer workload
Troubleshooting
Swap Non Actif au Boot
# Vérifier /etc/fstab
cat /etc/fstab | grep swap
# Vérifier syntaxe
# Correct : /swapfile none swap sw 0 0
# Erreur commune : mauvais path
# Tester activation manuelle
sudo swapon -a
# Si erreur, regarder dmesg
dmesg | grep -i swap
OOM Killer Actif
Pour une gestion complète des processus, consultez notre guide sur la gestion des processus et debugging.
# Voir logs OOM
dmesg | grep -i "out of memory"
journalctl -k | grep -i "killed process"
# Processus tués
grep -i 'killed process' /var/log/syslog
# Solution : Augmenter swap ou RAM
Swap sur SSD : Usure
# Vérifier écriture SSD
sudo smartctl -a /dev/sda | grep Written
# Réduire usure
vm.swappiness=1 # Utiliser swap minimum
zswap.enabled=1 # Compression en RAM d'abord
# Ou désactiver swap totalement si RAM suffisante
Bonnes Pratiques
Taille Swap Recommandée
| RAM | Swap sans hibernation | Swap avec hibernation |
| Moins de 2 GB | 2x RAM | 3x RAM |
| 2-8 GB | = RAM | 2x RAM |
| 8-32 GB | 0.5x RAM | 1.5x RAM |
| Plus de 32 GB | 2 à 4 GB ou 0 | = RAM |
Checklist Configuration
# Configuration optimale serveur production
□ Swap fichier 2 à 4 GB créé
□ swappiness=10
□ vfs_cache_pressure=50
□ zswap activé (si SSD)
□ Monitoring swap actif
□ Alertes configurées
□ THP désactivé (si DB)
Conclusion
Le swap reste une brique utile de la gestion mémoire Linux :
Points clés :
- Créer swap avec fichier (flexible) ou partition (performance)
- Configurer swappiness selon usage (10 serveur, 60 desktop)
- Activer zswap pour compression (gain 2-3x)
- Monitorer utilisation régulièrement
- Adapter taille selon RAM disponible
Commandes essentielles :
# Créer swap
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# Configurer swappiness
sudo sysctl vm.swappiness=10
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
# Vérifier
free -h
swapon --show
Avec cette configuration, votre système Linux exploite la mémoire disponible sans saturer le swap.


