Swap sous Linux : Comprendre swappiness=0 vs swappiness=1 selon les distributions
Guide complet de configuration du swap et swappiness selon Ubuntu, RHEL, Fedora avec tests et recommandations par workload.
Publié le
10 novembre 2024
Lecture
12 min
Vues
1.6k
Auteur
Florian Courouge
Linux
Swap
Swappiness
Performance
Ubuntu
RHEL
Fedora
Table des matières
📋 Vue d'ensemble rapide des sujets traités dans cet article
Cliquez sur les sections ci-dessous pour naviguer rapidement
Swap sous Linux : Comprendre swappiness=0 vs swappiness=1 selon les distributions
La configuration du swap et du paramètre vm.swappiness est l'une des optimisations les plus controversées sous Linux. Selon votre distribution et version du kernel, swappiness=0 peut avoir des comportements radicalement différents. Voici un guide complet pour naviguer ces subtilités.
💡Le mythe de swappiness=0
Comportement historique vs moderne
Avant kernel 3.5 :
•swappiness=0 = swap complètement désactivé
•Risque d'OOM (Out of Memory) même avec du swap disponible
Kernel 3.5+ :
•swappiness=0 = swap seulement en cas de pression mémoire critique
# Pour serveurs de production
vm.swappiness = 1
# Pour desktops avec SSD
vm.swappiness = 10
# Pour serveurs bases de données
vm.swappiness = 1
vm.vfs_cache_pressure = 50
Particularités Ubuntu :
•Support excellent du swappiness=1 depuis 18.04
•Zswap activé par défaut sur les versions récentes
# Kernel moderne - swappiness=1 OK
vm.swappiness = 1
# Avec tuned pour optimisation automatique
tuned-adm profile throughput-performance
# OU
tuned-adm profile latency-performance
Particularités Red Hat :
•tuned daemon peut overrider vos paramètres
•RHEL 7 : éviter swappiness=0 (OOM garantis)
•RHEL 8+ : swappiness=1 sûr et recommandé
Fedora (33+)
Configuration moderne :
# Fedora utilise systemd-oomd par défaut
systemctl status systemd-oomd
# Active par défaut depuis Fedora 34
# Configuration recommandée
vm.swappiness = 1
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
# Identifier les processus utilisant du swap
for pid in $(ls /proc/*/status 2>/dev/null | cut -d/ -f3); do
swap=$(awk '/^VmSwap:/ {print $2}' /proc/$pid/status 2>/dev/null)
if [[ $swap && $swap -gt 0 ]]; then
comm=$(cat /proc/$pid/comm 2>/dev/null)
echo "PID $pid ($comm): ${swap}kB swap"
fi
done | sort -k3 -nr | head -10
Forcer le retour du swap en RAM :
# Attention : peut causer de la latence !
# Seulement si assez de RAM disponible
if [[ $(free | awk '/^Mem:/ {print $7}') -gt $(free | awk '/^Swap:/ {print $3}') ]]; then
echo "Retour du swap en RAM..."
swapoff -a && swapon -a
echo "Terminé"
else
echo "❌ Pas assez de RAM disponible pour vider le swap"
fi
💡Dépannage par distribution
Ubuntu : problèmes courants
# Vérifier si snapd utilise trop de swap
systemctl status snapd
snap list
# Désactiver snapd si problématique
systemctl mask snapd
# Ubuntu avec zswap - vérifier config
cat /sys/module/zswap/parameters/enabled
# true
# Ajuster zswap si nécessaire
echo 20 > /sys/module/zswap/parameters/max_pool_percent
•Toutes distributions : maintenir au minimum 2GB de swap même avec swappiness=1
Points critiques :
•Toujours tester sur un environnement non critique d'abord
•Monitorer l'utilisation mémoire après changement
•Adapter selon le workload (BDD vs web vs conteneurs)
•Tenir compte des outils système (tuned, systemd-oomd, zswap)
La règle d'or : swappiness=1 pour éviter le swap tout en gardant une soupape de sécurité contre les OOM killer inattendus.
À propos de l'auteur
Florian Courouge - Expert DevOps et Apache Kafka avec plus de 5 ans d'expérience dans l'architecture de systèmes distribués et l'automatisation d'infrastructures.
Cet article vous a été utile ?
Découvrez mes autres articles techniques ou contactez-moi pour discuter de vos projets DevOps et Kafka.