.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2013, Peter Schiffer .\" and Copyright (C) 2014, Michael Kerrisk .\" .\" %%%LICENSE_START(GPLv2+_DOC_FULL) .\" This is free documentation; you can redistribute it and/or .\" modify it under the terms of the GNU General Public License as .\" published by the Free Software Foundation; either version 2 of .\" the License, or (at your option) any later version. .\" .\" The GNU General Public License's references to "object code" .\" and "executables" are to be interpreted as the output of any .\" document formatting or typesetting system, including .\" intermediate and printed output. .\" .\" This manual is distributed in the hope that it will be useful, .\" but WITHOUT ANY WARRANTY; without even the implied warranty of .\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the .\" GNU General Public License for more details. .\" .\" You should have received a copy of the GNU General Public .\" License along with this manual; if not, see .\" . .\" %%%LICENSE_END .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH MEMUSAGE 1 "6 mars 2019" GNU "Manuel de l'utilisateur Linux" .SH NOM memusage \- Profiler l'utilisation par un programme de la mémoire .SH SYNOPSIS \fBmemusage\fP [\fIoption\fP] ... \fIprogramme\fP [\fIoptionprogramme\fP] ... .SH DESCRIPTION \fBmemusage\fP est un script bash qui profile l'utilisation de la mémoire par le programme \fIprogramme\fP. Il précharge la bibliothèque \fBlibmemusage.so\fP dans l'environnement de l'appelant (au moyen de la variable d'environnement \fBLD_PRELOAD\fP\ ; voir \fBld.so\fP(8)). La bibliothèque \fBlibmemusage.so\fP trace l'allocation de mémoire en interceptant les appels à \fBmalloc\fP(3), \fBcalloc\fP(3), \fBfree\fP(3) et \fBrealloc\fP(3)\ ; facultativement, les appels à \fBmmap\fP(2), \fBmremap\fP(2) et \fBmunmap\fP(2) peuvent aussi être interceptés. .PP \fBmemusage\fP peut produire les données collectées sous une forme textuelle ou il peut utiliser \fBmemusagestat\fP(1) (voir l'option \fB\-p\fP ci\-dessous) pour créer un fichier \fIPNG\fP fournissant la représentation graphique des données collectées. .SS "Résumé de l'utilisation de la mémoire" La ligne «\ Memory usage summary\ » produite par \fBmemusage\fP contient trois champs\ : .RS 4 .TP \fBheap total\fP Somme des paramètres \fItaille\fP de tous les appels \fBmalloc\fP(3), les produits (\fInmemb\fP*\fItaille\fP) de tous les appels \fBcalloc\fP(3) et la somme des paramètres \fBlongueur\fP de tous les appels \fBmmap\fP(2). Dans le cas d'appels \fBrealloc\fP(3) et \fBmremap\fP(2), si la nouvelle taille d'une allocation est plus grande que la taille précédente, la somme de toutes les différences (nouvelle taille moins ancienne taille) est ajoutée. .TP \fBheap peak\fP Maximum de tous les paramètres \fItaille\fP de \fBmalloc\fP(3), de tous les produits (\fInmemb\fP*\fItaille\fP) de \fBcalloc\fP(3) et de tous les paramètres \fItaille\fP de \fBrealloc\fP, des paramètres \fBlongueur\fP de \fBmmap\fP(2) et des paramètres \fInouvelle_taille\fP de \fBmremap\fP(2). .TP \fBstack peak\fP 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\ »). .RE .PP 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 \fBrealloc\fP(3) et \fBmremap\fP(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 \fBrealloc\fP(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 \fB0\fP). .PP La colonne «\ realloc/total memory\ » du tableau produit par \fBmemusage\fP ne reflète pas les cas où \fBrealloc\fP(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\ ». .SS "Histogrammes des tailles de bloc" L'«\ Histogram for block sizes\ » fournit une répartition des allocations de mémoire en paquets de tailles diverses. .SH OPTIONS .TP \fB\-n\fP\ \fInom\fP,\ \fB\-\-progname=\fP\fInom\fP Nom du fichier de programme à profiler. .TP \fB\-p\fP\ \fIfichier\fP,\ \fB\-\-png=\fP\fIfichier\fP Créer un fichier graphique \fIPNG\fP et l'enregistrer dans \fIfichier\fP. .TP \fB\-d\fP\ \fIfichier\fP,\ \fB\-\-data=\fP\fIfichier\fP Créer un fichier de données binaires et l'enregistrer dans \fIfichier\fP. .TP \fB\-u\fP,\ \fB\-\-unbuffered\fP Ne pas mettre la sortie en tampon. .TP \fB\-b\fP\ \fItaille\fP,\ \fB\-\-buffer=\fP\fItaille\fP Rassembler les entrées de \fItaille\fP avant de les écrire. .TP \fB\-\-no\-timer\fP Désactiver l'échantillonnage basé sur le temporisateur (\fBSIGPROF\fP) de la valeur du pointeur de pile. .TP \fB\-m\fP,\ \fB\-\-mmap\fP Tracer aussi \fBmmap\fP(2), \fBmremap\fP(2) et \fBmunmap\fP(2). .TP \fB\-?\fP,\ \fB\-\-help\fP Afficher l'aide puis quitter. .TP \fB\-\-usage\fP Afficher une brève description sur l'utilisation et quitter. .TP \fB\-V\fP,\ \fB\-\-version\fP Afficher les informations de version, puis quitter. .TP Les options suivantes ne s'appliquent que lors de la création d'une sortie graphique\ : .TP \fB\-t\fP,\ \fB\-\-time\-based\fP Utiliser le temps (plutôt que le nombre d'appels de fonction) comme échelle de l'axe\ X. .TP \fB\-T\fP,\ \fB\-\-total\fP Créer aussi un graphique de l'usage total de la mémoire. .TP \fB\-\-title=\fP\fInom\fP Utiliser \fInom\fP comme titre du graphique. .TP \fB\-x\ \fP\fItaille\fP,\ \fB\-\-x\-size=\fP\fItaille\fP Créer un graphique d'une largeur de \fItaille\fP pixels. .TP \fB\-y\ \fP\fItaille\fP,\ \fB\-\-y\-size=\fP\fItaille\fP Créer un graphique d'une hauteur de \fItaille\fP pixels. .SH "CODE DE RETOUR" Le code de retour est égal au code de retour du programme profilé. .SH BOGUES Pour signaler des bogues, voir .UR http://www.gnu.org/software/libc/bugs.html .UE .SH EXEMPLE 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 \fImemusage.png\fP\ : .PP .in +4n .EX $ \fBmemusage \-\-data=memusage.dat ./a.out\fP \&... 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% ================ $ \fBmemusagestat memusage.dat memusage.png\fP .EE .in .SS "Source du programme" .EX #include #include #define CYCLES 20 int main(int argc, char *argv[]) { int i, j; int *p; printf("malloc: %zd\en", sizeof(int) * 100); p = malloc(sizeof(int) * 100); for (i = 0; i < CYCLES; i++) { if (i < CYCLES / 2) j = i; else j\-\-; printf("realloc: %zd\en", sizeof(int) * (j * 50 + 110)); p = realloc(p, sizeof(int) * (j * 50 + 100)); printf("realloc: %zd\en", sizeof(int) * ((j+1) * 150 + 110)); p = realloc(p, sizeof(int) * ((j + 1) * 150 + 110)); } free(p); exit(EXIT_SUCCESS); } .EE .SH "VOIR AUSSI" \fBmemusagestat\fP(1), \fBmtrace\fP(1), \fBld.so\fP(8) .SH COLOPHON Cette page fait partie de la publication\ 5.04 du projet \fIman\-pages\fP Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page peuvent être trouvées à l'adresse \%https://www.kernel.org/doc/man\-pages/. .SH TRADUCTION La traduction française de cette page de manuel a été créée par Christophe Blaess , Stéphan Rafin , Thierry Vignaud , François Micaux, Alain Portal , Jean-Philippe Guérard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas François , Florentin Duneau , Simon Paillard , Denis Barbier , David Prévot et Jean-Pierre Giraud . Cette traduction est une documentation libre ; veuillez vous reporter à la .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE 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 à .MT debian-l10n-french@lists.debian.org .ME .