Vider la mémoire cache d’un serveur Linux

Salut à tous,

Vous le savez je bosse sur des serveurs de calculs, et depuis un certains temps certains calculs plantaient par manque de mémoire.

Ce n’est pas un phénomène nouveau, mais je ne vais pas m’étaler sur le pourquoi du comment, je vous conseille plutôt de lire cet article déjà tout bien écrit : https://www.randco.fr/blog/2012/gestion-de-la-ram-sous-linux/

Juste les commandes de bases à savoir :

Vérifier l’état de la mémoire sur votre système

Taper la commande Free avec les options qui vont bien, au pire un petit “man free” (et pas l’inverse) pour plus d’options

$ free -mt
             total       used       free     shared    buffers     cached
Mem:          3832        755       3076          0         25        485
-/+ buffers    244       3587
Swap:         2047          1       2046
Total:        5880        757       5123

Ou alors le bon vieux fichier /proc/meminfo (mais c’est plutôt imbitable pour les néophytes)

$ cat /proc/meminfo
MemTotal:        3924412 kB
MemFree:         3150572 kB
Buffers:           26228 kB
Cached:           497512 kB
SwapCached:          204 kB
Active:           437460 kB
Inactive:         199132 kB
Active(anon):      39828 kB
Inactive(anon):    73212 kB
Active(file):     397632 kB
Inactive(file):   125920 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:       2097148 kB
SwapFree:        2095868 kB
Dirty:                 4 kB
Writeback:             0 kB
AnonPages:        112832 kB
Mapped:            13084 kB
Shmem:               188 kB
Slab:              65576 kB
SReclaimable:      33132 kB
SUnreclaim:        32444 kB
KernelStack:        2864 kB
PageTables:         8856 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     4059352 kB
Committed_AS:     257772 kB
VmallocTotal:   34359738367 kB
VmallocUsed:      163900 kB
VmallocChunk:   34359561148 kB
HardwareCorrupted:     0 kB
AnonHugePages:     12288 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       10240 kB
DirectMap2M:     4184064 kB

Bref tout ça pour dire que parfois j’ai besoin de vider le cache ram.

Voici les différentes commandes disponibles

Libère la mémoire des données en cache

$ sync; echo 1 > /proc/sys/vm/drop_caches

Libère la mémoire des données en tampon

$ sync; echo 2 > /proc/sys/vm/drop_caches

Libère la mémoire des données cache et tampon (celle que j’utilise en règle générale).

$ sync; echo 3 > /proc/sys/vm/drop_caches

La commande sync permet de s’assurer que toutes les informations en mémoire en attente d’écriture soient bien répercutées sur le disque (oui mieux vaut prendre un minimum de précaution hein).

Ensuite, libre à vous de faire un petit script ou de mettre tout ça dans un crontab. Par exemple pour vider tous les jours à midi le cache :

# crontab -l

0 12 * *  * sync; echo 3 > /proc/sys/vm/drop_caches

Je profite aussi de cet article pour vous noter comment vider la swap d’un serveur linux

swapoff -a 
swapon -a

Tout simplement 🙂