Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

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 octets
rss caches swap et anonyme, n'inclut pas tmpfs (shmem), en octets
mapped_file taille des fichiers mappé en mémoire, inclut tmpfs (shmem), en octets
pgpgin 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 octets
inactive_anon caches swap et anonyme de la liste des LRU (dernier récemment utilisé) inactifs, inclut tmpfs (shmem), en octets
active_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 octets
hierarchical_memsw_limit limite de la mémoire plus le swap pour la hiérarchie contenant le groupe de contrôle memory, en octets
En outre, à l'exception de hierarchical_memory_limit et de hierarchical_memsw_limit, tous les fichiers possèdent un préfixe total_ 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 et total_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 par memory.stat, remarquez comme les diverses statistiques sont reliées entres elles :
  • active_anon + inactive_anon = mémoire anonyme + cache du fichier de tmpfs + cache du swap
    Ainsi, active_anon + inactive_anonrss, car rss n'inclut pas tmpfs.
  • active_file + inactive_file = cache - taille de tmpfs
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 ou K pour des kilo-octets, m ou M pour des mégaoctets, et g ou G pour des gigaoctets.
L'utilisation de memory.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 sur memory.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 ou K pour des kilo-octets, m ou M pour des mégaoctets, et g ou G pour des gigaoctets.
L'utilisation de memory.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 sur memory.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. Utilisez memory.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 est 60. Des valeurs plus petites diminueront la tendance à déloger la mémoire de processus. Des valeurs plus élevées que 60 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 valeur 0 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 utiliser mlock() 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 ou 1) 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.