memusage(1) General Commands Manual memusage(1)

memusage - Profiler l'utilisation par un programme de la mémoire

memusage [option ...] program [programoption ...]

memusage is a bash(1) script which profiles memory usage of the program, program. It preloads the libmemusage.so library into the caller's environment (via the LD_PRELOAD environment variable; see ld.so(8)). The libmemusage.so library traces memory allocation by intercepting calls to malloc(3), calloc(3), free(3), and realloc(3); optionally, calls to mmap(2), mremap(2), and munmap(2) can also be intercepted.

memusage peut produire les données collectées sous une forme textuelle ou il peut utiliser memusagestat(1) (voir l'option -p ci-dessous) pour créer un fichier PNG fournissant la représentation graphique des données collectées.

La ligne « Memory usage summary » produite par memusage contient trois champs :

Sum of size arguments of all malloc(3) calls, products of arguments (n*size) of all calloc(3) calls, and sum of length arguments of all mmap(2) calls. In the case of realloc(3) and mremap(2), if the new size of an allocation is larger than the previous size, the sum of all such differences (new size minus old size) is added.
Maximum of all size arguments of malloc(3), all products of n*size of calloc(3), all size arguments of realloc(3), length arguments of mmap(2), and new_size arguments of mremap(2).
Avant le premier appel à toute fonction suivie, l'adresse du pointeur de pile (pointeur de pile de base) est sauvegardée. Après chaque appel de fonction, l'adresse du pointeur de pile effectif est lue et la différence avec le pointeur de pile de base est calculée. La plus grande de ces différences est alors le « pic de la pile » (« stack peak »).

Immédiatement après la ligne de résumé, un tableau montre le nombre d'appels, le total de la mémoire allouée ou désallouée et le nombre d'échecs d'appels pour chaque fonction interceptée. Pour realloc(3) et mremap(2), le champ supplémentaire « nomove » montre les réallocations qui ont changé l'adresse d'un bloc et le champ supplémentaire « dec » montre les réallocations qui ont diminué la taille du bloc. Pour realloc(3), le champ supplémentaire « free » montre les réallocations qui ont provoqué la libération d'un bloc (c'est-à-dire dont la taille réallouée est de 0).

La colonne « realloc/total memory » du tableau produit par memusage ne reflète pas les cas où realloc(3) est utilisé pour réallouer un bloc de mémoire pour qu'il ait une taille plus petite qu'avant. Ce cas peut faire que la somme de toutes les cellules « total memory » (sauf « free ») est plus grande que la cellule « free/total memory ».

L'« Histogram for block sizes » fournit une répartition des allocations de mémoire en paquets de tailles diverses.

Nom du fichier de programme à profiler.
Créer un fichier graphique PNG et l'enregistrer dans fichier.
Créer un fichier de données binaires et l'enregistrer dans fichier.
Ne pas mettre la sortie en tampon.
Rassembler les entrées de taille avant de les écrire.
Désactiver l'échantillonnage basé sur le temporisateur (SIGPROF) de la valeur du pointeur de pile.
Tracer aussi mmap(2), mremap(2) et munmap(2).
-?--help
Afficher l'aide puis quitter.
Afficher une brève description sur l'utilisation et quitter.
Afficher les informations de version, puis quitter.
Utiliser le temps (plutôt que le nombre d'appels de fonction) comme échelle de l'axe X.
Créer aussi un graphique de l'usage total de la mémoire.
Utiliser nom comme titre du graphique.
Créer un graphique d'une largeur de taille pixels.
Créer un graphique d'une hauteur de taille pixels.

Le code de retour est égal au code de retour du programme profilé.

Pour signaler des bogues, voir http://www.gnu.org/software/libc/bugs.html

Ci-dessous se trouve un programme simple qui réalloue de façon cyclique un bloc de mémoire qui atteint un sommet avant de réallouer la mémoire de façon cyclique dans des blocs plus petits qui diminuent jusqu'à zéro. Après compilation du programme et exécution des commandes suivantes, un graphique de l'utilisation de la mémoire par le programme se trouve dans le fichier memusage.png :


$ memusage --data=memusage.dat ./a.out
...
Memory usage summary: heap total: 45200, heap peak: 6440, stack peak: 224
        total calls  total memory  failed calls
 malloc|         1           400             0
realloc|        40         44800             0  (nomove:40, dec:19, free:0)
 calloc|         0             0             0
   free|         1           440
Histogram for block sizes:
  192-207             1   2% ================
...
 2192-2207            1   2% ================
 2240-2255            2   4% =================================
 2832-2847            2   4% =================================
 3440-3455            2   4% =================================
 4032-4047            2   4% =================================
 4640-4655            2   4% =================================
 5232-5247            2   4% =================================
 5840-5855            2   4% =================================
 6432-6447            1   2% ================
$ memusagestat memusage.dat memusage.png

#include <stdio.h>
#include <stdlib.h>
#define CYCLES 20
int
main(int argc, char *argv[])
{
    int i, j;
    size_t size;
    int *p;
    size = sizeof(*p) * 100;
    printf("malloc: %zu\n", size);
    p = malloc(size);
    for (i = 0; i < CYCLES; i++) {
        if (i < CYCLES / 2)
            j = i;
        else
            j--;
        size = sizeof(*p) * (j * 50 + 110);
        printf("realloc: %zu\n", size);
        p = realloc(p, size);
        size = sizeof(*p) * ((j + 1) * 150 + 110);
        printf("realloc: %zu\n", size);
        p = realloc(p, size);
    }
    free(p);
    exit(EXIT_SUCCESS);
}

memusagestat(1), mtrace(1), ld.so(8)

La traduction française de cette page de manuel a été créée par Christophe Blaess https://www.blaess.fr/christophe/, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org.

25 novembre 2024 Pages du manuel de Linux 6.12