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 🙂