Libérer la mémoire réservée du VPS

Libérer la mémoire réservée par Linux pour kdump sur un VPS

Par défaut, le système Linux réserve une partie de la mémoire pour kdump. La taille de cette mémoire peut être définie via le paramètre crashkernel. La plupart des développeurs d’applications ne déclenchent généralement pas de panne du noyau, et il est possible de libérer cette mémoire en modifiant le fichier /etc/default/grub.

Si kdump n’est pas nécessaire, vous pouvez définir le paramètre crashkernel à 0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M pour libérer cette mémoire.

Vérification : cat /etc/default/grub

Valeur par défaut :

GRUB_CMDLINE_LINUX=" vga=792 console=tty0 console=ttyS0,115200n8 net.ifnames=0 noibrs nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295 iommu=pt crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M crash_kexec_post_notifiers=1"

Explication du champ crashkernel : pour les hôtes avec une mémoire de 0-1G, réserver 0M de mémoire ; pour les hôtes avec une mémoire de 1-4G, réserver 192M de mémoire ; pour les hôtes avec une mémoire de 4-128G, réserver 384M de mémoire ; pour les hôtes avec une mémoire de 128G et plus, réserver 512M de mémoire.

Les hôtes avec 1G de mémoire sont classés dans la tranche 1-4G et réservent 192MB de mémoire pour kdump. Les hôtes avec 4G de mémoire sont classés dans la tranche 4-128G et réservent 384MB de mémoire pour kdump.

Modification : sudo sed -i 's/crashkernel=0M-1G:0M,1G-4G:192M,4G-128G:384M,128G-:512M/crashkernel=0M-1G:0M,1G-4G:0M,4G-128G:0M,128G-:512M/' /etc/default/grub

Redémarrage pour prise d’effet : sudo update-grub && sudo reboot

Prenons l’exemple typique d’un VPS 2C1G souvent utilisé par les débutants. L’espace mémoire d’un système propre avant et après modification est indiqué ci-dessous. On peut constater une différence significative entre 366MB et 562MB.

# Avant modification
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          707180      340772      123400        2624      358872      366408
Swap:              0           0           0

# Après modification
root@iZj6c0otki9ho421eewyczZ:~# free
               total        used        free      shared  buff/cache   available
Mem:          903788      341656      451380        2616      251032      562132
Swap:              0           0           0

Espace mémoire d’un VPS 2C4G avant et après modification, montrant une différence entre 3,1GB et 3,5GB.

# Avant modification
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3512696      377672     2870944        1260      415116     3135024
Swap:              0           0           0

# Après modification
root@iZj6c1prxn78ilvd2inku1Z:~# free
               total        used        free      shared  buff/cache   available
Mem:         3905912      374468     3408304        1252      270508     3531444
Swap:              0           0           0

Plus d’informations sur kdump

Kdump est un mécanisme de vidage de noyau lors d’une panne, utilisé pour capturer l’état de la mémoire du système lorsque le noyau Linux subit une panne. Il est basé sur la technologie kexec, qui permet à un noyau Linux de lancer un autre noyau Linux sans passer par l’initialisation du BIOS. Cela permet au système de démarrer rapidement sur un nouveau noyau (appelé noyau de capture ou crashkernel) après une panne.

Lorsque le système rencontre une erreur fatale et déclenche une erreur du noyau (kernel panic), le noyau en cours d’exécution (également appelé noyau principal) utilise kexec pour charger le noyau de capture préparé et enregistrer le contenu de la mémoire du système à un emplacement spécifié, comme une partition sur disque ou via le réseau vers une autre machine. Ce fichier d’image mémoire enregistré (vmcore ou fichier kdump) peut être utilisé pour une analyse post-mortem, aidant les développeurs ou les administrateurs système à identifier la cause de la panne.

Pour activer la fonctionnalité kdump, il est généralement nécessaire de réserver une partie de la mémoire pour le noyau de capture dans la configuration de démarrage du système. Ainsi, même si le noyau principal plante, cette partie de la mémoire reste intacte, garantissant que le noyau de capture peut fonctionner normalement et terminer la tâche de vidage de la mémoire. La configuration et l’utilisation de kdump impliquent généralement la modification des paramètres du chargeur d’amorçage, l’ajustement des paramètres du noyau et la configuration d’un emplacement de stockage approprié pour sauvegarder les fichiers vmcore.