Introduction
Vous avez un VPS avec 1 ou 2 Go de RAM et votre serveur plante sans prévenir ? Votre base de données MySQL se fait tuer par le système en pleine nuit ? Le coupable est souvent le même : un manque de mémoire vive sans filet de sécurité. La solution s'appelle le swap, un mécanisme simple mais essentiel que tout administrateur système devrait connaître et configurer. Dans cet article, nous allons voir ce qu'est le swap, pourquoi il est indispensable sur un serveur, et comment le configurer correctement sur Linux.
Qu'est-ce que le swap ?
Le swap (ou espace d'échange) est une zone du disque dur que le système d'exploitation utilise comme extension de la mémoire vive (RAM). Quand la RAM est pleine, le noyau Linux déplace les données les moins utilisées vers le swap pour libérer de la place en mémoire.
Concrètement, c'est comme si votre bureau (la RAM) était trop petit pour tous vos dossiers. Au lieu de jeter des dossiers, vous les rangez temporairement dans un tiroir (le swap). C'est plus lent d'aller les chercher dans le tiroir que de les avoir directement sur le bureau, mais au moins vous ne perdez rien.
RAM vs Swap : les différences
- RAM : Mémoire physique ultra-rapide (nanosecondes d'accès), coûteuse, limitée par le matériel
- Swap : Espace disque utilisé comme mémoire, beaucoup plus lent (millisecondes sur SSD), mais facilement extensible
# Vérifier l'état de la RAM et du swap
free -h
# Exemple de sortie :
# total used free shared buff/cache available
# Mem: 1.9Gi 803Mi 93Mi 32Mi 1.0Gi 887Mi
# Swap: 2.0Gi 0B 2.0Gi
Pourquoi le swap est indispensable sur un serveur
1. Protection contre le OOM Killer
Sans swap, quand la RAM est pleine, le noyau Linux active le OOM Killer (Out Of Memory Killer). Ce mécanisme tue brutalement les processus qui consomment le plus de mémoire pour sauver le système. Le problème ? C'est souvent votre base de données MySQL ou votre application qui se fait tuer en premier, ce qui provoque un crash de votre site.
# Vérifier si le OOM Killer a sévi récemment
sudo dmesg | grep -i "out of memory"
sudo journalctl | grep -i "oom"
# Exemple de message OOM :
# Out of memory: Killed process 1234 (mysqld) total-vm:1234kB
Avec du swap, le système a une marge de manœuvre. Au lieu de tuer des processus, il déplace temporairement des données vers le disque. Votre site ralentit peut-être un peu, mais il reste en ligne.
2. Gestion des pics de charge
Un serveur web ne consomme pas toujours la même quantité de mémoire. Certains événements provoquent des pics :
- Un article qui devient viral sur les réseaux sociaux
- Un bot qui crawle toutes vos pages en même temps
- Une tâche cron qui traite un gros volume de données
- Une mise à jour système qui nécessite de la mémoire temporaire
Le swap absorbe ces pics sans que votre serveur ne tombe.
3. Optimisation de la mémoire par le noyau
Même avec suffisamment de RAM, le swap permet au noyau Linux d'être plus intelligent dans sa gestion de la mémoire. Le système peut déplacer vers le swap des pages mémoire inactives (un processus qui dort depuis des heures) pour garder la RAM disponible pour les processus actifs. C'est une optimisation, pas un signe de problème.
4. Hibernation et maintenance
Le swap est nécessaire pour l'hibernation du système (suspend-to-disk). Sur un serveur, c'est moins courant, mais le swap facilite aussi certaines opérations de maintenance qui nécessitent temporairement plus de mémoire que d'habitude.
Swap sur SSD vs HDD
La performance du swap dépend fortement du type de stockage :
- SSD (NVMe/SATA) : Le swap sur SSD est assez rapide. Les temps d'accès sont de l'ordre de la microseconde. C'est environ 100 fois plus lent que la RAM, mais suffisamment rapide pour ne pas bloquer le système
- HDD : Le swap sur disque mécanique est très lent (millisecondes d'accès). Le système devient presque inutilisable si le swap est fortement sollicité
La bonne nouvelle : la plupart des VPS modernes utilisent des SSD, donc le swap fonctionne correctement.
Quelle taille de swap choisir ?
La taille idéale du swap dépend de votre quantité de RAM et de votre usage :
| RAM disponible | Swap recommandé | Cas d'usage |
|---|---|---|
| 512 Mo - 1 Go | 2 Go | Petit VPS, site vitrine |
| 2 Go | 2 - 4 Go | VPS standard, WordPress, Laravel |
| 4 Go | 2 - 4 Go | Serveur applicatif moyen |
| 8 Go+ | 2 - 4 Go | Serveur de production, BDD |
Règle générale : Sur un serveur, un swap de 2 Go est un bon compromis. Au-delà de 4 Go, le swap est rarement utile car si vous l'utilisez autant, c'est que vous avez besoin de plus de RAM.
Guide pratique : Configurer le swap sur Linux
Étape 1 : Vérifier l'état actuel
# Vérifier s'il y a déjà du swap
sudo swapon --show
# Vérifier la mémoire disponible
free -h
# Vérifier l'espace disque disponible
df -h /
Étape 2 : Créer le fichier swap
# Créer un fichier swap de 2 Go
sudo fallocate -l 2G /swapfile
# Si fallocate ne fonctionne pas (certains systèmes de fichiers)
# sudo dd if=/dev/zero of=/swapfile bs=1M count=2048
# Sécuriser les permissions (important !)
sudo chmod 600 /swapfile
# Formater le fichier en swap
sudo mkswap /swapfile
# Activer le swap
sudo swapon /swapfile
Étape 3 : Rendre le swap permanent
Sans cette étape, le swap disparaît au prochain redémarrage du serveur.
# Ajouter le swap au fichier fstab
echo "/swapfile none swap sw 0 0" | sudo tee -a /etc/fstab
# Vérifier que la ligne a été ajoutée
cat /etc/fstab | grep swap
Étape 4 : Configurer le swappiness
Le paramètre swappiness contrôle à quel point le noyau est "agressif" dans son utilisation du swap. La valeur va de 0 à 100 :
- 0 : Le swap n'est utilisé qu'en dernier recours (quand la RAM est vraiment pleine)
- 10 : Valeur recommandée pour les serveurs - le swap est utilisé occasionnellement
- 60 : Valeur par défaut sur Ubuntu - trop agressive pour un serveur
- 100 : Le swap est utilisé très agressivement (déconseillé)
# Voir la valeur actuelle
cat /proc/sys/vm/swappiness
# Changer temporairement (jusqu'au prochain reboot)
sudo sysctl vm.swappiness=10
# Rendre permanent
echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf
# Vérifier
sudo sysctl vm.swappiness
Étape 5 : Vérifier que tout fonctionne
# Vérifier le swap
free -h
sudo swapon --show
# Résultat attendu :
# NAME TYPE SIZE USED PRIO
# /swapfile file 2G 0B -2
Surveiller l'utilisation du swap
Une fois le swap configuré, il est important de surveiller son utilisation pour détecter les problèmes de mémoire.
# Vue d'ensemble rapide
free -h
# Détail par processus (les plus gourmands en mémoire)
ps aux --sort=-%mem | head -10
# Surveiller en temps réel
watch -n 5 free -h
# Voir quel processus utilise le swap (Linux 2.6.34+)
for file in /proc/*/status; do
awk '/VmSwap|Name/{printf $2 " " $3}END{ print ""}' $file
done | sort -k 2 -n -r | head -10
# Avec htop (plus visuel)
htop
Quand le swap est trop utilisé : que faire ?
Si votre swap est constamment sollicité (plus de 50% utilisé), c'est un signal d'alarme. Voici les actions à prendre :
1. Identifier le coupable
# Les 10 processus les plus gourmands en mémoire
ps aux --sort=-%mem | head -10
# Mémoire utilisée par les conteneurs Docker
docker stats --no-stream
2. Optimiser MySQL/MariaDB
MySQL est souvent le plus gros consommateur de mémoire. Ajustez ces paramètres dans /etc/mysql/my.cnf :
[mysqld]
# Réduire le buffer pool (défaut: 128M, ajuster selon votre RAM)
innodb_buffer_pool_size = 256M
# Limiter les connexions simultanées
max_connections = 50
# Réduire le cache des requêtes
query_cache_size = 0
query_cache_type = 0
3. Optimiser PHP-FPM
# Dans /etc/php/8.x/fpm/pool.d/www.conf
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
pm.max_requests = 500
4. Upgrader la RAM
Si les optimisations ne suffisent pas, il est temps de passer à un VPS avec plus de RAM. C'est souvent la solution la plus simple et la moins chère en termes de temps passé.
Swap et Docker : attention aux pièges
Si vous utilisez Docker, il y a quelques points importants à connaître :
- Docker peut limiter le swap par conteneur : Utilisez
--memory-swappour contrôler la quantité de swap qu'un conteneur peut utiliser - Le swap de l'hôte protège tous les conteneurs : Même si un conteneur consomme trop, le swap de l'hôte empêche le OOM Killer de tuer d'autres conteneurs
- Surveillez avec
docker stats: Cette commande montre la mémoire utilisée par chaque conteneur en temps réel
# Limiter la mémoire d'un conteneur avec swap
docker run -d --memory=512m --memory-swap=1g mon-app
# Voir l'utilisation mémoire de tous les conteneurs
docker stats --no-stream --format "table {{.Name}}\t{{.MemUsage}}\t{{.MemPerc}}"
Supprimer ou redimensionner le swap
Si vous devez modifier votre swap :
# Désactiver le swap
sudo swapoff /swapfile
# Supprimer le fichier
sudo rm /swapfile
# Retirer la ligne du fstab
sudo sed -i '/swapfile/d' /etc/fstab
# Pour redimensionner : recréer avec une nouvelle taille
sudo fallocate -l 4G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
Partition swap vs Fichier swap
Il existe deux façons de configurer le swap :
- Fichier swap (recommandé) : Plus flexible, facile à redimensionner, pas besoin de repartitionner le disque. C'est la méthode que nous avons utilisée dans ce guide
- Partition swap : Légèrement plus performant sur HDD, mais rigide et difficile à modifier. Pertinent seulement sur des serveurs avec des disques mécaniques
Sur un VPS avec SSD, le fichier swap est le meilleur choix.
Bonnes pratiques
- Toujours configurer du swap sur les serveurs avec moins de 4 Go de RAM
- Swappiness à 10 pour les serveurs (pas la valeur par défaut de 60)
- Surveiller régulièrement l'utilisation du swap avec
free -h - Ne pas compter sur le swap comme remplacement de la RAM : c'est un filet de sécurité, pas une solution permanente
- Permissions 600 sur le fichier swap (sécurité)
- Ajouter au fstab pour que le swap survive aux redémarrages
- Alerting : Configurez des alertes quand l'utilisation du swap dépasse 50%
Conclusion
Le swap est un mécanisme simple mais vital pour la stabilité de votre serveur. En quelques commandes, vous ajoutez un filet de sécurité qui protège votre site contre les crashes mémoire. Sur un petit VPS, c'est la différence entre un site qui tombe en pleine nuit et un site qui reste en ligne même sous pression. Configurez-le dès le premier jour de votre serveur, réglez le swappiness à 10, et surveillez son utilisation. Votre uptime vous remerciera.
En résumé : 5 commandes suffisent pour sécuriser votre serveur avec du swap : fallocate, chmod, mkswap, swapon, et une ligne dans /etc/fstab. Ne négligez pas cette étape.