Swap

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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