🧭 Sommaire
Le système Linux utilise la mémoire vive disponible pour mettre en cache les données des applications sur le disque dur afin d’accélérer les temps de lecture.
Que nettoyons-nous exactement ?
PageCache : Le noyau Linux stocke les données dans des sections inutilisées de la mémoire au cas où il en aurait besoin à nouveau.
Le cache de pages est le principal cache de disque utilisé par le noyau Linux. Dans la plupart des cas, le noyau fait référence au cache des pages lorsqu’il lit ou écrit sur le disque. De nouvelles pages sont ajoutées au cache des pages pour satisfaire les demandes de lecture des processus du mode utilisateur. Si la page n’est pas déjà dans le cache, une nouvelle entrée est ajoutée au cache et remplie avec les données lues sur le disque. Si la mémoire libre est suffisante, la page est conservée dans le cache pendant une période indéfinie et peut alors être réutilisée par d’autres processus sans accéder au disque.
Dentries sont la représentation en mémoire d’une entrée de annuaire et elles incluent des choses comme les métadonnées.
Dans le noyau Linux, un « dentry » est la représentation en mémoire d’une entrée de répertoire ; c’est un moyen de se souvenir de la résolution d’un nom de fichier ou de répertoire donné sans avoir à chercher dans le système de fichiers pour le trouver. Le cache des dentry accélère considérablement les recherches ; garder les dentry pour les noms fréquemment accédés comme /tmp, /dev/null, ou /usr/bin/tetris permet d’économiser beaucoup d’E/S du système de fichiers.
Inode Méta-données sur tous les fichiers de vos systèmes
Un inode est une structure de données qui stocke diverses informations sur un fichier sous Linux, comme le mode d’accès (autorisations de lecture, d’écriture, d’exécution), la propriété, le type de fichier, la taille du fichier, le groupe, le nombre de liens, etc. Chaque inode est identifié par un nombre entier. Un inode est attribué à un fichier lors de sa création.
Dans les systèmes Linux, il existe trois options pour vider le cache sans interrompre les services ou les processus.
Pour Vider le PageCache:
sudo su sync; echo 1 > /proc/sys/vm/drop_caches
Pour vider les dentries et les inodes.
sudo su sync; echo 2 > /proc/sys/vm/drop_caches
Pour vider le pagecache, les dentries, et les inodes.
sudo su sync; echo 3 > /proc/sys/vm/drop_caches
La commande sync libère le tampon du système de fichiers. Les commandes séparées par » ; » sont exécutées séquentiellement, c’est-à-dire que le terminal attend la fin de chaque commande avant d’exécuter la commande suivante dans la séquence.
L’écriture dans « drop_cache » permet de nettoyer le cache sans interrompre aucune application/service,
la commande echo effectue les opérations d’écriture dans le fichier drop_cache.
Et si on automatise tout ça ?
Créer un Fichier .sh avec l’éditeur de votre choix
vim monfichier.sh
Ajoutez le script suivant, dans mon cas j’ai mis echo3 pour vider le pagecache, les dentries, et les inodes.
#!/bin/bash sync echo "echo 3 > /proc/sys/vm/drop_caches" #Remplacez le 3 par le type d'option de votre choix
Attribuer des droits de lecture/écriture :
sudo chmod 755 monfichier.sh
Ajoutez votre fichier via crontab, je vous encourage à lire le Man https://man7.org/linux/man-pages/man5/crontab.5.html si vous n’avez encore jamais utilisé crontab
sudo crontab -e
Et ajoutez « 0 1 * * * /root/path/monfichier .sh « pour que la tâche se répète chaque heure.
GNU nano 5.6.1 /tmp/crontab.I85knH/crontab # Edit this file to introduce tasks to be run by cron. # # Each task to run has to be defined through a single line # indicating with different fields when the task will be run # and what command to run for the task # # To define the time you can provide concrete values for # minute (m), hour (h), day of month (dom), month (mon), # and day of week (dow) or use '*' in these fields (for 'any'). # # Notice that tasks will be started based on the cron's system # daemon's notion of time and timezones. # # Output of the crontab jobs (including errors) is sent through # email to the user the crontab file belongs to (unless redirected). # # For example, you can run a backup of all your user accounts # at 5 a.m every week with: # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # # For more information see the manual pages of crontab(5) and cron(8) # # m h dom mon dow command 0 1 * * * /root/path/taskcleanram.sh