htop expliqué, partie 7 : utilisation de la mémoire

Article arrivé 1er sur Hacker News, 1er sur /r/sysadmin, 2nd sur /r/linux), traduit avec l’accord de son auteur Pēteris Ņikiforovs, il présente la commande htop et les notions de base des composants d’un système GNU/Linux que cette commande affiche.

Voici les différents chapitres déjà publiés :

  1. l’uptime
  2. la load average (charge moyenne)
  3. les processus
  4. les processus utilisateur
  5. l’état des processus
  6. temps et priorités des processus

Aujourd’hui : l’usage de la mémoire


htop

Usage de la mémoire – VIRT/RES/SHR/MEM

Un processus a l’illusion d’être seul à s’exécuter en mémoire. Cela est réalisé en utilisant la mémoire virtuelle.

Un processus n’a pas un accès direct à la mémoire physique. À la place, il a son propre espace virtuel d’adressage et le noyau fait correspondre les adresses de la mémoire virtuelle à la mémoire physique ou peut en mettre une partie sur disque. C’est pour cela qu’il semble que les processus utilisent plus de mémoire que celle installée sur votre système.

Le point que je veux souligner ici est qu’il n’est pas simple de savoir combien de mémoire un processus prend. Voulez-vous aussi comptabiliser les bibliothèques partagées ou en mémoire sur disque ? Mais le noyau le permet et htop montre des informations qui vous aident à estimer l’usage de la mémoire.

Voilà ce que les couleurs d’utilisation de la mémoire signifient :

  • Vert : mémoire utilisée
  • Bleu : buffers
  • Orange : cache

VIRT/VSZ – image virtuelle

La quantité totale de mémoire virtuelle utilisé par une tâche. Cela inclut tout le code, les données et les bibliothèques partagées plus les pages qui ont été mises dans la swap (ndt : sur disque) et les pages qui ont été mises sur disque mais pas utilisées.

VIRT est l’usage de la mémoire . Cela inclut tout, y compris les fichiers de mémoire sur disque.

Si une application demande 1 gigaoctet de mémoire mais n’en utilise que 1 mégaoctet, donc VIRT indiquera 1 gigaoctet. S’il fait correspondre cette mémoire vers un fichier de 1 gigaoctet et ne l’utilise jamais, VIRT indiquera également 1 gigaoctet.

La plupart du temps, ce n’est pas un nombre très utile.

RES/RSS – taille résidente

La taille de la mémoire physique non-mise en swap qu’une tâche utilise.

RES est l’usage de la mémoire résidente, c’est-à-dire ce qui est en ce moment en mémoire physique.

Si RES peut être un meilleur indicateur de l’utilisation de la mémoire par un processus que VIRT, gardez en tête que

  • cela n’inclut pas la mémoire swappée (ndt : sur disque)
  • une partie de la mémoire peut être partagée avec d’autres processus

Si un processus utilise 1 gigaoctet de mémoire et qu’il appelle fork(), le résultat de la bifurcation sera 2 processus dont RES est également 1 gigaoctet mais seulement 1 gigaoctet de mémoire sera en fait utilisée puisque Linux utilise copy-on-write.

SHR – taille de la mémoire partagée

La quantité de mémoire partagée utilisée par une tâche
Cela représente simplement la mémoire qui pourrait potentiellement être partagée par d’autres processus.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

int main() {
 printf("Started\n");
 sleep(10);

size_t memory = 10 * 1024 * 1024; // 10 MB
 char* buffer = malloc(memory);
 printf("Allocated 10M\n");
 sleep(10);

for (size_t i = 0; i < memory/2; i++)
 buffer[i] = 42;
 printf("Used 5M\n");
 sleep(10);

int pid = fork();
 printf("Forked\n");
 sleep(10);

if (pid != 0) {
 for (size_t i = memory/2; i < memory/2 + memory/5; i++)
 buffer[i] = 42;
 printf("Child used extra 2M\n");
 }
 sleep(10);

return 0;
}

fallocate -l 10G
gcc -std=c99 mem.c -o mem
./mem

Process Message VIRT RES SHR
main Started 4200 680 604
main Allocated 10M 14444 680 604
main Used 5M 14444 6168 1116
main Forked 14444 6168 1116
child Forked 14444 5216 0
main Child used extra 2M 8252 1116
child Child used extra 2M 5216 0

À faire : je devrais finir ça.

MEM% – utilisation de la mémoire

La part de la mémoire physique disponible couramment utilisée par une tâche.
Il s’agit de RES divisé par la totalité de la RAM que vous avez.
Si RES est de 400 megaoctets et que vous avez 8 gigaoctets de RAM, MEM% sera 400/8192*100 = 4.8% .


J’espère que vous aurez compris le fonctionnement des différents indicateurs de la mémoire dans htop. Pour le dernier article de cette série, nous étudierons les processus lancés au démarrage d’un système GNU/Linux.

3 thoughts on “htop expliqué, partie 7 : utilisation de la mémoire

  1. Bonsoir,
    dans le dernier exemple, n’est-ce pas plutôt :
    400/8192*100 = 4.8% ?

    Merci pour cette série d’articles en tout cas 🙂

    • En effet il y a quelque chose de peu clair, je viens de faire un test et ça ne colle pas à sa formule. Je le contacte pour savoir ce qu’il a voulu dire.

    • Porki : après discussion après l’auteur, je te confirme que tu avais tout à fait raison. Je mets à jour l’article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *