Kennisbank › Linux › Gestion des processus et de la mémoire sous Linux
linux gevorderd 26 August 2026

Gestion des processus et de la mémoire sous Linux

Gestion des processus et de la mémoire sous Linux : mécanismes du noyau, outils et allocateurs

Gestion des processus et de la mémoire sous Linux : mécanismes du noyau, outils et allocateurs

Cet article explique comment fonctionne le sous-système de gestion de la mémoire de Linux — de la pagination aux allocateurs — et montre les commandes pour surveiller les processus et l'utilisation de la mémoire. Destiné aux administrateurs système et aux ingénieurs DevOps qui travaillent avec les noyaux Linux versions 5.x et 6.x.

Prérequis

- Un système Linux avec une version de noyau 5.13 ou supérieure (pour le support des huge pages vmalloc) ou 6.12+ (pour vrealloc) - Accès root ou droits sudo pour consulter la documentation du noyau et installer des outils - Paquet `procps` (contient `vmstat`) — présent par défaut sur la plupart des distributions - Installer l'outil `smem` : `sudo apt install smem` (Debian/Ubuntu) ou `sudo dnf install smem` (Fedora/RHEL)

Étapes

1. Vérifiez votre version de noyau

Exécutez :

uname -r

Notez le numéro de version. Les fonctions de gestion de la mémoire varient selon la version du noyau — vrealloc n'existe par exemple que depuis la v6.12 (2024).

2. Comprenez les bases : la pagination et les tables de pages

Chaque processus Linux possède sa propre table de pages. Cette table fait correspondre les adresses mémoire virtuelles aux emplacements mémoire physiques. La mémoire est divisée en blocs égaux : les « pages » virtuelles sont attribuées aux « cadres de pages » physiques. C'est le cœur de l'isolation mémoire entre les processus — un processus ne peut ni lire ni écrire dans la mémoire d'un autre processus.

Consultez la documentation officielle du noyau :

man 9 memory

ou en ligne : la section « Memory Management » de la documentation du noyau Linux (mise à jour le 24 août 2026) et la page séparée « Memory Management Documentation » (actualisée le 18 août 2026).

3. Consultez l'utilisation active de la mémoire avec vmstat

`vmstat` affiche les processus, la mémoire, la pagination, les entrées/sorties bloc, les changements de contexte et l'activité CPU. Le premier rapport montre des moyennes depuis le dernier redémarrage ; les rapports suivants montrent une période d'échantillonnage.

vmstat 2 5

Cela exécute 5 rapports à intervalles de 2 secondes. Regardez les colonnes `si` (swap in) et `so` (swap out) — des valeurs élevées indiquent une pression mémoire.

4. Mesurez l'utilisation mémoire par processus avec smem

`smem` rapporte l'utilisation mémoire par processus, y compris l'USS (Unique Set Size) — la mémoire utilisée exclusivement par un seul processus, sans chevauchement avec d'autres processus. C'est plus précis que `top` ou `ps` pour les systèmes avec de nombreux processus simultanés.

smem -rs uss

Le drapeau `-r` trie, `-s uss` trie sur la colonne USS. Installez le paquet s'il manque (voir Prérequis).

5. Configurez la mémoire d'échange (swap)

Le swap est une mémoire virtuelle sur disque utilisée lorsque la RAM est pleine. Cela évite un crash immédiat, mais c'est plus lent que la RAM. Consultez l'état actuel du swap :

swapon --show

Pour créer un fichier d'échange de 2 Go :

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

Ajoutez `/swapfile none swap sw 0 0` à `/etc/fstab` pour le rendre permanent.

6. Limitez les ressources avec cgroups

Les cgroups (groupes de contrôle) limitent la mémoire et d'autres ressources par groupe de processus. C'est essentiel dans les environnements multi-utilisateurs et les conteneurs. Créez un cgroup avec une limite mémoire de 512 Mo :

sudo mkdir /sys/fs/cgroup/memory/mygroup
echo 536870912 | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes

Placez un processus dans le groupe en écrivant son PID dans le fichier tasks :

echo <PID> | sudo tee /sys/fs/cgroup/memory/mygroup/tasks

7. Connaissez l'OOM-killer

Le tueur Out-of-Memory termine automatiquement un ou plusieurs processus lorsque le système manque sérieusement de mémoire. C'est un dernier recours pour maintenir le noyau stable. Consultez le journal de l'OOM-killer :

dmesg | grep -i "out of memory"

Vous pouvez influencer le comportement de l'OOM par processus avec `oom_score_adj` :

echo -1000 | sudo tee /proc/<PID>/oom_score_adj

Une valeur de -1000 rend un processus immunisé contre l'OOM-killer ; +1000 en fait un premier candidat.

8. Connaissez l'historique des allocateurs (pour le contexte)

Le noyau a utilisé différents allocateurs au fil du temps. Cette connaissance aide à interpréter la documentation du noyau et à choisir des optimisations :

- 1991 : allocateur buddy pour les pages mémoire - 1996 : allocateur SLAB pour les objets du noyau - 2007 : SLUB devient la norme (meilleures performances, maintenance plus simple) - 2021 (v5.13) : support des huge pages vmalloc - 2023 : SLOB supprimé (était destiné aux très petits systèmes) - 2024 (v6.12) : vrealloc — réorganisation plus flexible de la mémoire virtuelle

Vérification

Vérifiez que tout fonctionne :

vmstat 1 3
smem -rs uss | head -20
swapon --show
cat /sys/fs/cgroup/memory/mygroup/memory.usage_in_bytes

Vous devriez voir : une activité de swap dans les colonnes `si`/`so`, une liste de processus triés par USS, votre fichier d'échange dans la sortie de swapon, et une utilisation mémoire inférieure à 536870912 octets pour le cgroup.

Problèmes fréquents

Problème 1 : commande `smem` introuvable Installez le paquet : `sudo apt install smem` ou `sudo dnf install smem`. Sur certains systèmes, le paquet s'appelle `smemstat`.

Problème 2 : l'OOM-killer termine des processus malgré un swap suffisant Vérifiez que `vm.swappiness` est bas. Sinon, le noyau échange trop agressivement. Réglez-le avec :

sudo sysctl vm.swappiness=10

Rendez ce réglage permanent dans `/etc/sysctl.conf`.

Problème 3 : le cgroup-map n'est pas présent sous /sys/fs/cgroup Sur les systèmes avec cgroups v2 (noyau 4.5+), vous utilisez une interface différente. Consultez le montage :

mount | grep cgroup

Avec cgroups v2, utilisez `echo "max" > /sys/fs/cgroup//memory.max` au lieu de `memory.limit_in_bytes`.

Le noyau évolue — l'allocateur d'aujourd'hui sera différent dans cinq ans. Continuez à suivre les pages de documentation ; la prochaine modification est déjà dans le changelog du noyau v6.13.

← Retour à la base de connaissances
← Terug naar kennisbank