#Blog_IT > orienté systèmes et réseaux

Gestion de la mémoire Linux

Aucun commentaire

 

Vérifier l’état d’occupation de la RAM :

 

free -mh

 

Mém = RAM

Echange = SWAP

 

Les indicateurs importants sont :

 

Total : l’ensemble de la RAM allouée au système

Utilisé : la mémoire actuellement occupée

Disponible : la mémoire utilisable à cet instant (= total – utilisé - partagé)

 

Libre = mémoire non utilisé, même pas par le cache

Partagé= mémoire utilisée par tmpfs (fichiers stockés en RAM)

Cache= mémoire utilisée par les applications pour accélérer le fonctionnement mais libérable instantanément si besoin

 

Le SWAP :

L’espace d’échange aka SWAP, est un espace mémoire résidant sur le disque où la mémoire décharge des éléments en urgence lorsque la RAM manque pour éviter un crash.

Les éléments ne nécessitant pas d’accès rapide seront volontairement placés en SWAP, lorsqu’ils seront appelés ils pourront passer en RAM. Un échange IO se crée il est vérifiable par la commande vmstat :

 

Les valeurs si et so témoignent des échanges entrants et sortants

 Cet espace est également utilisé par certaine application qui souhaite placer des éléments mémoires spécifiquement en SWAP.

 

 Monitoring

htop

Permet d’avoir un monitoring live

Les valeurs peuvent être différentes de free par les utilisations des unités Gi/Go/Gb

 

Une image contenant texte, capture d’écran, logiciel, Logiciel multimédia

Description générée automatiquement

 

 

La barre d’usage MEM a des couleurs particulières pour montrer la répartition de la RAM

 

Vert : mémoire utilisé

Bleu : tampon

Jaune : Cache

 

Les colonnes de l’usage mémoire :

 

VIRT : Mémoire virtuelle : fichiers sur disques, et les bibliothèques partagées, le swap et les pages qui ont été mises sur disque mais pas utilisées.

 

RES : Mémoire résidente : mémoire effective utilisée par le processus, comprend également la mémoire utilisée par d’autres process enfant de celui-ci

 

SHR : Mémoire pouvant être partagée par d’autres processus

 

Seule la valeur de RES donne une idée de la RAM consommée par un processus

 

 Gestion de la mémoire par le noyau : tuning

 

Le swapiness est une propriété du noyau Linux qui lui permet de déterminer la fréquence d’utilisation du SWAP. Par défaut cette valeur est de 60. Plus la valeur est proche de 0, moins le noyau utilisera le SWAP.

Pour des serveurs bien dimensionnés en RAM, et selon les applicatifs cette valeur doit être ajustée.

Exemple : MariaDB ou PostGresql recommande une valeur de 1, Oracle une valeur de 10.

 

Cette valeur doit être modifiée dans le fichier /etc/sysctl.conf

 

vm.swappiness=1

 

 

Par défaut un processus peut arriver à consommer plus de mémoire que la mémoire allouée ou disponible et déclencher le mécanisme OOM Killer et se faire tuer.

 

Dans /etc/sysctl.conf c’est la paramètre vm.overcommit_memory qui définit le comportement

Par défaut la valeur est 0, le noyau doit vérifier si l’allocation mémoire est possible selon une analyse. Mais ce n’est pas infaillible, un oom kill peut se déclencher.

Avec la valeur 1, aucune vérification, la surcharge mémoire est autorisée

 

La valeur 2 refuse les demandes de mémoire supérieure selon le calcul :

Limite allocation mémoire = Swap + RAM * (Overcommit Ratio / 100)

 

Par défaut vm.overcommit_ratio = 50

 

Recommandation sur un serveur en production de BDD pour éviter les oom kill, à adapter selon la quantité de RAM et SWAP.

 

Exemple serveur à 10 GB + 2 GB SWAP :

2+ 10*0.8 = 10GB 

 

vm.overcommit_memory = 2

vm.overcommit_ratio = 80

vm.swappiness = 1

 

vm.vfs_cache_pressure=50

 

Le paramètre vfs cache pressure contrôle la tendance à libérer du cache une donnée plutôt que de les libérer rapidement et de faire travailler le disque. La valeur par défaut est 100.

50 permet de garder en cache plus longtemps, plus performant pour une bdd.

 

OOM Killer

 

Mécanisme protégeant le système d’un crash en tuant le processus qui demande de la mémoire au-delà de la capacité.

Pour déterminer l’importance d’un processus et s’il a le droit d’être tué une notion de score existe :

Noté de -1000 à 1000

-1000 = intuable

 

Pour voir le score d’un processus : cat /proc/P_ID/oom_score

Il est possible de fixer un score directement dans le daemon du processus :

[Service] OOMScoreAdjust=-17

 

En cas de déclenchement une trace est présente dans /var/log/kern.log avec le processus tué et la quantité de mémoire qu’il demandait

Exemple :

 

Apr 29 12:51:26 srv kernel: [11273.289233] oom-kill:constraint=CONSTRAINT_NONE,nodemask=(null),cpuset=/,mems_allowed=0,global_oom,task_memcg=/system.slice/system-postgresq>@13-main.service,task=postgres,pid=18325,uid=107

Apr 29 12:51:26 srv kernel: [11273.289253] Out of memory: Killed process 18325 (postgres) total-vm:9479320kB, anon-rss:5123092kB, file-rss:0kB, shmem-rss:524572kB, UID:107> pgtables:14092kB oom_score_adj:0

 

Aucun commentaire :

Enregistrer un commentaire