3.7. mémoire
Le sous-système
mémoire
génère des rapports automatiques sur les ressources mémoire utilisées par les tâches dans un groupe de contrôle. Il définit aussi les limites d'utilisation de mémoire de ces tâches :
- memory.stat
- rapporte un large éventail de statistiques de mémoire, comme décrit dans le tableau suivant :
Tableau 3.1. Les valeurs rapportées par memory.stat Statistique Description cache
cache de la page, inclut tmpfs
(shmem
), en octetsrss
caches swap et anonyme, n'inclut pas tmpfs
(shmem
), en octetsmapped_file
taille des fichiers mappé en mémoire, inclut tmpfs
(shmem
), en octetspgpgin
nombre de pages chargées en mémoire pgpgout
nombre de pages renvoyées de la mémoire swap
usage swap, en octets active_anon
caches swap et anonyme de la liste des LRU (dernier récemment utilisé) actifs, inclut tmpfs
(shmem
), en octetsinactive_anon
caches swap et anonyme de la liste des LRU (dernier récemment utilisé) inactifs, inclut tmpfs
(shmem
), en octetsactive_file
mémoire sauvegardée sur fichier de la liste des LRU actifs, en octets inactive_file
mémoire sauvegardée sur fichier de la liste des LRU inactifs, en octets unevictable
mémoire ne pouvant pas être récupérée, en octets hierarchical_memory_limit
limite de la mémoire pour la hiérarchie contenant le groupe de contrôle memory
, en octetshierarchical_memsw_limit
limite de la mémoire plus le swap pour la hiérarchie contenant le groupe de contrôle memory
, en octetsEn outre, à l'exception dehierarchical_memory_limit
et dehierarchical_memsw_limit
, tous les fichiers possèdent un préfixetotal_
qui effectue un rapport non seulement sur le groupe de contrôle, mais aussi sur ses enfants. Par exemple,swap
rapporte l'utilisation du swap d'un groupe de contrôle ettotal_swap
rapporte l'utilisation totale du swap du groupe de contrôle et de tous ses groupes enfants.Lorsque vous interprétez les valeurs rapportées parmemory.stat
, remarquez comme les diverses statistiques sont reliées entres elles :active_anon
+inactive_anon
= mémoire anonyme + cache du fichier detmpfs
+ cache du swapAinsi,active_anon
+inactive_anon
≠rss
, carrss
n'inclut pastmpfs
.active_file
+inactive_file
= cache - taille detmpfs
- memory.usage_in_bytes
- rapporte la totalité de l'utilisation de mémoire actuelle par les processus dans le groupe de contrôle (en octets).
- memory.memsw.usage_in_bytes
- rapporte la somme de l'utilisation actuelle de la mémoire et de l'espace swap utilisé par les processus dans le groupe de contrôle (en octets).
- memory.max_usage_in_bytes
- rapporte le montant maximum de mémoire utilisée par les processus dans le groupe de contrôle (en octets).
- memory.memsw.max_usage_in_bytes
- rapporte le montant maximum de mémoire et d'espace swap utilisé par les processus dans le groupe de contrôle (en octets).
- memory.limit_in_bytes
- définit le montant maximum de mémoire utilisateur (y compris le cache du fichier). Si aucune unité n'est saisie, la valeur sera interprétée en octets. Il est cependant possible d'utiliser des suffixes afin de représenter de plus grandes unités —
k
ouK
pour des kilo-octets,m
ouM
pour des mégaoctets, etg
ouG
pour des gigaoctets.L'utilisation dememory.limit_in_bytes
pour limiter le groupe de contrôle racine est impossible ; l'application de valeurs est uniquement possible sur des groupes se trouvant plus bas dans la hiérarchie.Écrire-1
surmemory.limit_in_bytes
pour supprimer toutes les limites existantes. - memory.memsw.limit_in_bytes
- définit le montant maximum de la somme de l'utilisation de la mémoire et du swap. Si aucune unité n'est saisie, la valeur sera interprétée en octets. Il est cependant possible d'utiliser des suffixes afin de représenter de plus grandes unités —
k
ouK
pour des kilo-octets,m
ouM
pour des mégaoctets, etg
ouG
pour des gigaoctets.L'utilisation dememory.memsw.limit_in_bytes
pour limiter le groupe de contrôle racine est impossible ; l'application de valeurs est uniquement possible sur des groupes se trouvant plus bas dans la hiérarchie.Écrire-1
surmemory.memsw.limit_in_bytes
pour supprimer toutes les limites existantes. - memory.failcnt
- rapporte le nombre de fois que la limite de mémoire a atteint la valeur définie dans
memory.limit_in_bytes
. - memory.memsw.failcnt
- rapporte le nombre de fois que la limite de la somme de la mémoire et de l'espace swap a atteint la valeur définie dans
memory.memsw.limit_in_bytes
. - memory.force_empty
- vide la mémoire de toutes les pages utilisées par des tâches dans ce groupe de contrôle lorsque défini sur
0
. Cette interface peut uniquement être utilisée lorsque le groupe de contrôle ne possède aucune tâche. Si la mémoire ne peut pas être libérée, celle-ci sera déplacée sur un groupe de contrôle parent si possible. Utilisezmemory.force_empty
avant de supprimer un groupe de contrôle afin d'éviter de déplacer les caches des pages hors d'usage sur son groupe de contrôle parent. - memory.swappiness
- définit la tendance du noyau à déloger la mémoire de processus utilisée par les tâches dans ce groupe de contrôle plutôt que de réclamer des pages depuis le cache de page. Il s'agit de la même tendance et du même calcul que ce qui figure dans
/proc/sys/vm/swappiness
pour le système en tant que tout. La valeur par défaut est60
. Des valeurs plus petites diminueront la tendance à déloger la mémoire de processus. Des valeurs plus élevées que60
augmenteront la tendance du noyau à déloger la mémoire de processus, et les valeurs supérieures à100
permettront au noyau de déloger des pages faisant partie de l'espace adresse pour ce groupe de contrôle.Remarquez que la valeur0
n'empêchera pas la mémoire de processus d'être délogée; celui-ci pourra tout de même se produire lorsqu'il y a un manque de mémoire système car la logique de gestion de la mémoire virtuelle globale ne lit pas la valeur du groupe de contrôle. Pour complètement verrouiller les pages, veuillez utilisermlock()
au lieu des groupes de contrôle.Il n'est pas possible de modifier le "swappiness" des groupes suivants :- le groupe de contrôle racine, qui utilise le "swappiness" installé dans
/proc/sys/vm/swappiness
. - un groupe de contrôle possédant des groupes enfants.
- memory.use_hierarchy
- contient un indicateur (
0
ou1
) spécifiant si la mémoire utilisée devrait être prise en compte sur une hiérarchie de groupes de contrôle. Si activé (1
), le sous-système de la mémoire récupèrera la mémoire de tous les processus enfants excédant la limite de mémoire. Par défaut (0
), le sous-système ne récupère pas la mémoire d'une tâche enfant.