Comment vérifier si les limites de mémoire du noyau sont définies dans Linux

LinuxLinuxBeginner
Pratiquer maintenant

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, nous allons explorer comment vérifier et comprendre les limites de mémoire du noyau (kernel) dans Linux. Nous allons nous concentrer sur le paramètre vm.overcommit_memory, qui contrôle la façon dont le noyau gère les demandes d'allocation de mémoire.

Grâce à des étapes pratiques, vous apprendrez à utiliser la commande sysctl pour afficher et modifier temporairement ce paramètre du noyau, à vérifier les paramètres de mémoire en inspectant le répertoire /proc/sys/vm, et à identifier les fichiers de configuration persistants du noyau dans /etc/sysctl.d. Ce laboratoire vous offrira une expérience pratique dans la gestion et la compréhension du comportement de la mémoire sous Linux.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/SystemInformationandMonitoringGroup(["System Information and Monitoring"]) linux(("Linux")) -.-> linux/UserandGroupManagementGroup(["User and Group Management"]) linux/BasicFileOperationsGroup -.-> linux/ls("Content Listing") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/SystemInformationandMonitoringGroup -.-> linux/service("Service Managing") linux/UserandGroupManagementGroup -.-> linux/env("Environment Managing") linux/UserandGroupManagementGroup -.-> linux/export("Variable Exporting") subgraph Lab Skills linux/ls -.-> lab-558795{{"Comment vérifier si les limites de mémoire du noyau sont définies dans Linux"}} linux/cat -.-> lab-558795{{"Comment vérifier si les limites de mémoire du noyau sont définies dans Linux"}} linux/service -.-> lab-558795{{"Comment vérifier si les limites de mémoire du noyau sont définies dans Linux"}} linux/env -.-> lab-558795{{"Comment vérifier si les limites de mémoire du noyau sont définies dans Linux"}} linux/export -.-> lab-558795{{"Comment vérifier si les limites de mémoire du noyau sont définies dans Linux"}} end

Vérifier les limites de mémoire avec sysctl vm.overcommit

Dans cette étape, nous allons explorer comment Linux gère l'allocation de mémoire, en particulier en nous concentrant sur le paramètre vm.overcommit_memory à l'aide de la commande sysctl.

La commande sysctl est utilisée pour modifier les paramètres du noyau (kernel) à l'exécution. Ces paramètres sont souvent stockés dans le répertoire /proc/sys/. Le paramètre vm.overcommit_memory contrôle la façon dont le noyau gère les demandes de mémoire qui dépassent la mémoire physique RAM disponible.

Il existe trois valeurs possibles pour vm.overcommit_memory :

  • 0 : Overcommit heuristique. Le noyau tente d'estimer si une demande d'allocation de mémoire est possible. C'est le paramètre par défaut.
  • 1 : Toujours overcommit. Le noyau accorde toujours les demandes d'allocation de mémoire, même si elles dépassent la mémoire disponible. Cela peut entraîner la terminaison de processus plus tard si ceux-ci tentent réellement d'utiliser la mémoire.
  • 2 : Jamais overcommit. Le noyau n'accorde pas les demandes d'allocation de mémoire si elles dépassent l'espace d'échange (swap) total disponible plus un pourcentage configurable de la mémoire physique RAM.

Vérifions la valeur actuelle de vm.overcommit_memory. Ouvrez votre terminal et tapez la commande suivante :

sysctl vm.overcommit_memory

Appuyez sur Entrée.

Vous devriez voir une sortie similaire à celle-ci :

vm.overcommit_memory = 0

Cette sortie montre que le paramètre actuel de vm.overcommit_memory est 0, ce qui signifie que le noyau utilise l'overcommit heuristique.

Comprendre ce paramètre est important pour gérer les ressources du système et éviter les erreurs de mémoire insuffisante dans certaines applications.

Maintenant, essayons de changer cette valeur temporairement. Nous pouvons le faire en utilisant sudo sysctl -w. Le drapeau -w vous permet d'écrire une nouvelle valeur dans un paramètre du noyau.

Tapez la commande suivante pour définir vm.overcommit_memory sur 1 :

sudo sysctl -w vm.overcommit_memory=1

Appuyez sur Entrée.

Vous devriez voir une sortie confirmant le changement :

vm.overcommit_memory = 1

Maintenant, vérifions à nouveau la valeur pour confirmer qu'elle a été modifiée :

sysctl vm.overcommit_memory

Appuyez sur Entrée.

La sortie devrait maintenant afficher :

vm.overcommit_memory = 1

Notez que les modifications apportées avec sysctl -w sont temporaires et seront réinitialisées lors du redémarrage du système. Nous explorerons comment rendre ces modifications permanentes dans une étape ultérieure.

Cliquez sur Continuer pour passer à l'étape suivante.

Vérifier les paramètres de mémoire dans /proc/sys/vm

Dans l'étape précédente, nous avons utilisé la commande sysctl pour vérifier et modifier le paramètre du noyau (kernel) vm.overcommit_memory. Maintenant, voyons où ces paramètres sont réellement stockés dans le système de fichiers.

Linux expose les paramètres du noyau via un système de fichiers virtuel situé dans /proc/sys. Ce système de fichiers ne contient pas de vrais fichiers sur le disque, mais fournit plutôt une interface pour interagir avec le noyau en cours d'exécution.

Les paramètres liés à la mémoire se trouvent dans le répertoire /proc/sys/vm/. Nous pouvons utiliser la commande ls pour lister les fichiers de ce répertoire.

Ouvrez votre terminal et tapez la commande suivante :

ls /proc/sys/vm/

Appuyez sur Entrée.

Vous verrez une liste de fichiers, chacun représentant un paramètre du noyau lié à la mémoire virtuelle. La sortie ressemblera à ceci (les fichiers exacts peuvent varier légèrement en fonction de la version du noyau) :

admin_reserve_kbytes            hugetlb_shm_group             oom_kill_allocating_task
block_dump                      laptop_mode                   oom_score_adj
compact_hueristics              lowmem_reserve_ratio          overcommit_memory
compact_memory                  max_map_count                 overcommit_ratio
... (beaucoup d'autres fichiers)

Remarquez le fichier nommé overcommit_memory. Ce fichier contient la valeur actuelle du paramètre vm.overcommit_memory avec lequel nous avons travaillé dans l'étape précédente.

Nous pouvons utiliser la commande cat pour afficher le contenu de ce fichier. Rappelez-vous que nous avons défini la valeur sur 1 dans l'étape précédente.

Tapez la commande suivante :

cat /proc/sys/vm/overcommit_memory

Appuyez sur Entrée.

La sortie devrait être :

1

Cela confirme que la valeur que nous avons définie à l'aide de sysctl -w est reflétée dans le fichier /proc/sys/vm/overcommit_memory.

Vous pouvez également afficher d'autres paramètres liés à la mémoire dans ce répertoire en utilisant cat. Par exemple, pour voir le ratio d'overcommit :

cat /proc/sys/vm/overcommit_ratio

Appuyez sur Entrée.

La sortie affichera le ratio d'overcommit actuel, qui est utilisé lorsque vm.overcommit_memory est défini sur 2.

50

Explorer les fichiers dans /proc/sys/vm/ est un excellent moyen de comprendre les différents paramètres du noyau qui contrôlent la gestion de la mémoire dans Linux.

Cliquez sur Continuer pour passer à l'étape suivante.

Inspecter la configuration sysctl dans /etc/sysctl.d

Dans les étapes précédentes, nous avons appris à vérifier et à modifier temporairement les paramètres du noyau (kernel) à l'aide de sysctl et à comprendre comment ces paramètres sont reflétés dans le système de fichiers /proc/sys. Cependant, les modifications apportées avec sysctl -w ne sont pas permanentes. Pour rendre les modifications des paramètres du noyau persistantes après les redémarrages, nous devons les configurer dans des fichiers de configuration spécifiques.

Le principal emplacement pour les configurations sysctl persistantes est le fichier /etc/sysctl.conf. De plus, les systèmes Linux utilisent souvent le répertoire /etc/sysctl.d/ pour stocker des extraits de configuration dans des fichiers séparés. Cette approche modulaire facilite la gestion des configurations pour différentes applications ou composants du système.

Inspectons le contenu du répertoire /etc/sysctl.d/. Nous pouvons utiliser la commande ls pour lister les fichiers de ce répertoire.

Ouvrez votre terminal et tapez la commande suivante :

ls /etc/sysctl.d/

Appuyez sur Entrée.

Vous verrez une liste de fichiers de configuration. Ces fichiers ont généralement une extension .conf. La sortie pourrait ressembler à ceci :

10-console-messages.conf  10-kernel-hardening.conf  10-tcp-congestion-control.conf  99-sysctl.conf

Chacun de ces fichiers peut contenir des paramètres sysctl au format paramètre = valeur. Lorsque le système démarre, il lit /etc/sysctl.conf puis tous les fichiers dans /etc/sysctl.d/ par ordre alphabétique pour appliquer les paramètres persistants du noyau.

Voyons le contenu d'un de ces fichiers de configuration, par exemple, 10-kernel-hardening.conf. Nous pouvons utiliser la commande cat pour afficher son contenu.

Tapez la commande suivante :

cat /etc/sysctl.d/10-kernel-hardening.conf

Appuyez sur Entrée.

Vous verrez les paramètres du noyau configurés dans ce fichier. Le contenu variera, mais il pourrait inclure des paramètres liés à la sécurité ou au comportement du système.

#
## Paramètres sysctl pour le durcissement du noyau
#

## Désactiver les espaces de noms d'utilisateurs non privilégiés
kernel.unprivileged_userns_clone=0

## Se protéger contre les attaques par liens symboliques
fs.protected_hardlinks=1
fs.protected_symlinks=1

## Désactiver kexec
kernel.kexec_load_disabled=1

## Désactiver le JIT BPF
net.core.bpf_jit_enable=0

## Désactiver l'accès ptrace aux autres processus
kernel.yama.ptrace_scope=1

Vous pouvez voir comment des paramètres du noyau tels que kernel.unprivileged_userns_clone et fs.protected_hardlinks sont définis ici.

Pour rendre notre paramètre vm.overcommit_memory=1 permanent, nous ajouterions généralement la ligne vm.overcommit_memory = 1 à un nouveau fichier ou à un fichier existant dans /etc/sysctl.d/ (ou dans /etc/sysctl.conf). Cependant, dans le cadre de ce laboratoire introductif, nous ne rendrons pas cette modification permanente.

Comprendre le répertoire /etc/sysctl.d/ est essentiel pour configurer des paramètres persistants du noyau sur votre système Linux.

Cliquez sur Continuer pour terminer ce laboratoire.

Résumé

Dans ce laboratoire, nous avons appris à vérifier et à comprendre les limites de mémoire du noyau (kernel) dans Linux, en nous concentrant particulièrement sur le paramètre vm.overcommit_memory. Nous avons utilisé la commande sysctl pour afficher la valeur actuelle de ce paramètre, qui contrôle la manière dont le noyau gère les demandes d'allocation de mémoire qui dépassent la mémoire physique RAM disponible. Nous avons exploré les trois valeurs possibles (0, 1 et 2) et leurs implications pour la gestion de la mémoire. Nous avons également pratiqué la modification temporaire de la valeur de vm.overcommit_memory à l'aide de sudo sysctl -w.

En outre, nous avons vérifié les paramètres de mémoire du noyau en inspectant le répertoire /proc/sys/vm, qui fournit une interface de système de fichiers pour les paramètres du noyau. Nous avons également appris à identifier les configurations persistantes des paramètres du noyau en examinant les fichiers dans le répertoire /etc/sysctl.d. Ces étapes ont permis de comprendre de manière approfondie comment vérifier et localiser les paramètres de limite de mémoire du noyau dans un environnement Linux.