Sysctl

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Configuration du noyau à chaud (interface /proc/sys/)
Commande sysctl, /etc/sysctl.conf, /etc/sysctl.d/*.conf
Contexte Linux — tout système
Voir aussi Performance réseau (sysctl) (tuning réseau détaillé)

sysctl lit et modifie les paramètres du noyau Linux exposés sous /proc/sys/ : chaque paramètre est en réalité un fichier virtuel, et la commande n'est qu'une façade pratique pour le lire ou l'écrire sans manipuler ces fichiers à la main. Elle couvre des domaines très divers — mémoire virtuelle, réseau, limites du système, sécurité — et permet d'ajuster le comportement du noyau sans recompiler ni redémarrer.

Mécanisme : /proc/sys/

Chaque paramètre correspond à un fichier sous /proc/sys/, dont le chemin donne directement le nom du paramètre en remplaçant les / par des . : /proc/sys/vm/swappiness devient vm.swappiness, /proc/sys/net/core/somaxconn devient net.core.somaxconn. Lire ou écrire ce fichier directement produit exactement le même effet qu'un appel à sysctl — la commande évite juste de retenir les chemins et gère en plus la syntaxe des fichiers de persistance.

cat /proc/sys/vm/swappiness          # lecture directe du fichier virtuel
echo 10 > /proc/sys/vm/swappiness    # écriture directe, équivalent à sysctl -w

sysctl vm.swappiness                 # même lecture, via la commande
sysctl -w vm.swappiness=10           # même écriture, via la commande

Afficher les paramètres (sysctl -a)

sysctl -a liste tous les paramètres disponibles avec leur valeur courante — pratique pour chercher un réglage par mot-clé ou vérifier l'état actuel avant de modifier quoi que ce soit.

sysctl -a                            # tous les paramètres et leurs valeurs actuelles
sysctl -a | grep swappiness          # filtrer sur un mot-clé

sysctl vm.swappiness                 # lire un seul paramètre
sysctl net.ipv4.ip_forward

Modifier à chaud (sysctl -w)

sysctl -w applique un changement immédiatement, mais uniquement en mémoire : la valeur est perdue au prochain redémarrage. C'est l'outil de choix pour tester un réglage avant de le rendre permanent.

sysctl -w vm.swappiness=10           # applique à chaud, non persistant
sysctl -w net.ipv4.ip_forward=1

Persistance (/etc/sysctl.conf, /etc/sysctl.d/)

Pour qu'un réglage survive à un redémarrage, il doit être écrit dans un fichier de configuration : historiquement /etc/sysctl.conf, ou — approche plus moderne et modulaire recommandée sur les distributions actuelles — un fichier dédié dans /etc/sysctl.d/ (un fichier par thème ou par outil, plus facile à gérer que d'éditer un unique fichier partagé). Après modification d'un de ces fichiers, sysctl -p recharge la configuration sans redémarrer.

echo "vm.swappiness = 10" >> /etc/sysctl.d/99-clipsy-tuning.conf
sysctl -p /etc/sysctl.d/99-clipsy-tuning.conf   # recharge un fichier précis
sysctl --system                                  # recharge tous les fichiers sysctl.d et sysctl.conf

Exemple : vm.swappiness

vm.swappiness contrôle la propension du noyau à utiliser le swap plutôt que de libérer du cache mémoire, sur une échelle de 0 à 100. C'est un bon exemple du compromis à arbitrer avec sysctl : une valeur basse privilégie la réactivité immédiate (le noyau évite le swap et garde les données en RAM) mais peut mener à des situations d'OOM si la mémoire physique vient à manquer, tandis qu'une valeur haute laisse le noyau swapper plus volontiers pour préserver du cache disque, au prix de latences si des pages swappées doivent être rechargées.

sysctl vm.swappiness                 # valeur actuelle (défaut typique : 60)
sysctl -w vm.swappiness=0            # évite le swap au maximum (test, non persistant)
sysctl -w vm.swappiness=100          # swappe plus volontiers (test, non persistant)

Voir aussi