Swap
| Fiche express | |
|---|---|
| Domaine | Mémoire virtuelle (swap) |
| Commandes | swapon, swapoff, mkswap
|
| Contexte | Partition ou fichier, Linux générique |
| Voir aussi | Fstab (persistance au démarrage) |
Le swap est un espace disque (partition ou fichier) utilisé par le noyau Linux comme extension de la mémoire vive lorsque celle-ci est saturée. Les commandes ci-dessous couvrent la consultation, l'activation/désactivation, le redimensionnement et le réglage de l'agressivité du swap (swappiness).
Lister l'espace swap
swapon --show # espaces swap actifs (taille, priorité, type)
swapon -s # équivalent, ancienne syntaxe
cat /proc/swaps # même information, lue directement dans le noyau
Créer et activer une partition swap
mkswap /dev/sda5 # formate la partition en swap
swapon /dev/sda5 # l'active immédiatement
Désactiver puis réactiver le swap
Utile pour vider la swap (faire remonter en RAM les pages swappées) sur une machine peu chargée :
swapoff -a # désactive tout le swap (échoue si pas assez de RAM libre pour reloger les pages)
swapon -a # réactive tout ce qui est déclaré dans /etc/fstab
Agrandir une swap sur LVM
swapoff /dev/vg/swaplv
lvextend -L 3G /dev/vg/swaplv
mkswap /dev/vg/swaplv
swapon /dev/vg/swaplv
swapon --show
Créer un fichier swap
Alternative à une partition dédiée, pratique quand le partitionnement n'a pas prévu de swap :
dd if=/dev/zero of=/swapfile bs=1M count=4096 # 4 Go, ou : fallocate -l 4G /swapfile
chmod 0600 /swapfile
mkswap /swapfile
swapon /swapfile
Puis rendre le montage persistant au démarrage dans /etc/fstab (voir Fstab) :
/swapfile swap swap defaults 0 0
Réglage du swappiness
Le swappiness (0 à 100) contrôle l'agressivité du noyau à swapper de la mémoire plutôt qu'à libérer du cache : plus la valeur est basse, plus le noyau évite le swap.
cat /proc/sys/vm/swappiness # valeur courante
sysctl vm.swappiness # équivalent
sysctl -w vm.swappiness=10 # changement à chaud, non persistant
Pour le rendre persistant au redémarrage :
echo 'vm.swappiness=10' > /etc/sysctl.d/99-swappiness.conf
sysctl -p /etc/sysctl.d/99-swappiness.conf # applique sans redémarrer
systemctl status systemd-sysctl.service # confirme que le service a bien lu les fichiers sysctl.d au boot
Identifier les process qui utilisent le swap
Script s'appuyant sur le champ Swap de /proc/<pid>/smaps, cumulé par process :
#!/bin/bash
# Affiche l'usage swap par process en cours
# Usage : ./getswap.sh | sort -n -k 5
SUM=0
OVERALL=0
for DIR in $(find /proc/ -maxdepth 1 -type d | egrep "^/proc/[0-9]"); do
PID=$(echo "$DIR" | cut -d / -f 3)
PROGNAME=$(ps -p "$PID" -o comm --no-headers)
PROGPATH=$(cat "/proc/$PID/cmdline")
for SWAP in $(grep Swap "$DIR/smaps" 2>/dev/null | awk '{ print $2 }'); do
let SUM=$SUM+$SWAP
done
echo "PID=$PID - Swap used: $SUM - ($PROGNAME - $PROGPATH)"
let OVERALL=$OVERALL+$SUM
SUM=0
done
echo "Overall swap used: $OVERALL"
Voir aussi
- Fstab — persistance des montages (partition ou fichier swap) au démarrage