SLBCloud
Intermédiaire7 min de lecture

Mémoire saturée, swap et processus tués

Pourquoi un service disparaît sans prévenir, comment ajouter du swap, et quand le swap est une bonne ou une mauvaise idée.

Votre service tournait, et il a disparu sans erreur dans ses propres journaux. Neuf fois sur dix, c'est le noyau qui l'a tué pour libérer de la mémoire. Il le note, mais ailleurs.

bash
sudo dmesg -T | grep -i 'out of memory'
sudo journalctl -k | grep -i 'killed process'

Si vous y trouvez une ligne « Out of memory: Killed process 1234 (mysqld) », vous avez votre réponse : la machine a manqué de mémoire et le noyau a sacrifié le plus gros consommateur.

Ajouter du swap

Le swap est une zone du disque utilisée comme mémoire de secours. C'est beaucoup plus lent que la mémoire vive, mais infiniment mieux qu'un processus tué.

  1. 1

    Créer le fichier

    Deux gigaoctets conviennent à la plupart des VPS. Le dimensionner à la taille de la mémoire vive est une bonne règle jusqu'à 4 Go.

    bash
    sudo fallocate -l 2G /swapfile
    sudo chmod 600 /swapfile
    sudo mkswap /swapfile
    sudo swapon /swapfile
  2. 2

    Le rendre permanent

    Sans cette ligne dans /etc/fstab, le swap disparaît au redémarrage.

    bash
    echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
  3. 3

    Vérifier

    bash
    free -h
    swapon --show

Régler l'empressement du noyau

swappiness décide à quel point le noyau préfère écrire sur le disque plutôt que de libérer du cache. La valeur par défaut, 60, est pensée pour un ordinateur de bureau. Sur un serveur, 10 est plus adapté : le swap sert de filet, pas de mémoire courante.

bash
cat /proc/sys/vm/swappiness
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-swap.conf
sudo sysctl --system

Le swap n'est pas de la mémoire

Une machine qui swappe en permanence est une machine sous-dimensionnée : chaque accès coûte mille fois plus cher qu'en mémoire vive, et l'application devient poussive sans qu'aucun voyant ne passe au rouge. Le swap achète du temps pour constater le problème, pas pour vivre avec.

Trouver qui consomme

bash
ps aux --sort=-%mem | head -10

Les suspects habituels : une base de données dont le cache est réglé plus grand que la machine, un serveur Java avec un -Xmx trop généreux, ou un site PHP dont le nombre de processus autorisés dépasse ce que la mémoire permet.

Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.

Ouvrir un ticket