.\" -*- coding: UTF-8 -*- .\" Copyright (c) 2013, Peter Schiffer .\" and Copyright (C) 2014, Michael Kerrisk .\" .\" SPDX-License-Identifier: GPL-2.0-or-later .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH memusage 1 "3. Mai 2023" "Linux man\-pages 6.05.01" .SH BEZEICHNUNG memusage \- Speicherverwendung eines Programms profilieren .SH ÜBERSICHT .nf \fBmemusage\fP [\fIOption\fP]… \fIProgramm\fP [\fIProgrammoption\fP]… .fi .SH BESCHREIBUNG \fBmemusage\fP ist ein \fBbash\fP(1)\-Skript, das die Speicherverwendung des Programms \fIProgramm\fP profiliert. Es lädt die Bibliothek \fBlibmemusage.so\fP vorab in die Umgebung des Aufrufenden (mittels der Umgebungsvariablen \fBLD_PRELOAD\fP, siehe \fBld.so\fP(8)). Die Bibliothek \fBlibmemusage.so\fP verfolgt die Speicherbelegungen mittels Abfangens der Aufrufe von \fBmalloc\fP(3), \fBcalloc\fP(3), \fBfree\fP(3) und \fBrealloc\fP(3) nach; optional können auch die Aufrufe von \fBmmap\fP(2), \fBmremap\fP(2) und \fBmunmap\fP(2) abgefangen werden. .PP \fBmemusage\fP kann die gesammelten Daten in textueller Form ausgeben oder es kann (mittels der nachfolgend beschriebenen Option \fB\-p\fP) \fBmemusagestat\fP(1) verwenden, um eine PNG\-Datei zu erstellen, die die graphische Darstellung der gesammelten Daten enthält. .SS Speicherverwendungszusammenfassung Die von \fBmemusage\fP ausgegebene Zeile »Memory usage summary« enthält drei Felder: .RS 4 .TP \fBheap total\fP Summe der Argumente \fIGröße\fP für alle \fBmalloc\fP(3)\-Aufrufe; Produkte der Argumente (\fInmemb\fP*\fIGröße\fP) aller \fBcalloc\fP(3)\-Aufrufe und die Summe aller Argumente \fILänge\fP aller \fBmmap\fP(2)\-Aufrufe. Im Falle von \fBrealloc\fP(3) und \fBmremap\fP(2) wird die Summe aller Differenzen (neue Größe minus alter Größe) hinzugefügt, falls die neue Größenreservierung die vorherige Größe überschreitet. .TP \fBheap peak\fP Maximum aller Argumente \fIGröße\fP aller \fBmalloc\fP(3), alle Produkte von \fInmemb\fP*\fIGröße\fP von \fBcalloc\fP(3), aller Argumente \fIGröße\fP von \fBrealloc\fP(3), Argumente \fILänge\fP von \fBmmap\fP(2) und Argumente \fIneue_Größe\fP von \fBmremap\fP(2). .TP \fBstack peak\fP Vor dem erstmaligen Aufruf jeder überwachten Funktion wird die Adresse des Stapel\-Zeigers (Basis\-Stapelzeiger) gesichert. Nach jedem Funktionsaufruf wird die tatsächliche Adresse gelesen und die Differenz zum Basis\-Stapelzeiger berechnet. Das Maximum dieser Differenzen ist der »stack peak«. .RE .PP Direkt nach dieser Zusammenfassungszeile zeigt eine Tabelle die Anzahl der Aufrufe, den insgesamt reservierten oder freigegebenen Speicher und die Anzahl der fehlgeschlagenen Aufrufe für jede abgefangene Funktion. Für \fBrealloc\fP(3) und \fBmremap\fP(2) zeigt das zusätzliche Feld »nomove« die Umreservierungen, die die Adresse eines Blocks änderten und das zusätzliche Feld »dec« zeigt die Umreservierungen, die die Größe eines Blocks verkleinerten. Für \fBrealloc\fP(3) zeigt das zusätzliche Feld »free« die Umreservierungen, die zur Freigabe eines Blocks führten (d.h. die umreservierte Größe war 0). .PP Das »realloc/total memory« der Tabellenausgabe von \fBmemusage\fP berücksichtigt Fälle nicht, bei denen \fBrealloc\fP(3) zur Umreservierung eines Speicherblocks zur Verkleinerung der vorherigen Größe verwandt wird. Dies kann zu einer Summe von allen »total memory«\-Zellen führen (ausschließlich »free«), die größer als die Zelle »free/total memory« ist. .SS "Histogramm für Blockgrößen" Das »Histogram for block sizes« stellt eine Aufteilung der Speicherreservierungen in verschiedene Topfgrößen dar. .SH OPTIONEN .TP \fB\-n\ \fP\fIName\fP,\ \fB\-\-progname=\fP\fIName\fP Name des zu profilierenden Programms. .TP \fB\-p\ \fP\fIDatei\fP,\ \fB\-\-png=\fP\fIDatei\fP Erstellt eine PNG\-Graphik und speichert sie in \fIDatei\fP. .TP \fB\-d\ \fP\fIDatei\fP,\ \fB\-\-data=\fP\fIDatei\fP Erstellt eine binäre Datendatei und speichert sie in \fIDatei\fP. .TP \fB\-u\fP,\ \fB\-\-unbuffered\fP Puffert die Ausgabe nicht. .TP \fB\-b\ \fP\fIGröße\fP,\ \fB\-\-buffer=\fP\fIGröße\fP Sammelt \fIGröße\fP Einträge, bevor sie herausgeschrieben werden. .TP \fB\-\-no\-timer\fP Deaktiviert Timer\-basierte (\fBSIGPROF\fP) Probennahme des Stapelzeigerwertes. .TP \fB\-m\fP,\ \fB\-\-mmap\fP Verfolgt \fBmmap\fP(2), \fBmremap\fP(2) und \fBmunmap\fP(2) auch nach. .TP \fB\-?\fP,\ \fB\-\-help\fP Hilfe ausgeben und beenden. .TP \fB\-\-usage\fP Gibt eine kurze Gebrauchsinformation aus und beendet sich. .TP \fB\-V\fP,\ \fB\-\-version\fP Gibt Versionsinformationen aus und beendet sich. .TP Die folgenden Optionen sind nur bei der Erstellung graphischer Ausgaben relevant: .TP \fB\-t\fP,\ \fB\-\-time\-based\fP Verwendet die Zeit (anstelle der Anzahl der Funktionsaufrufe) als Skala für die X\-Achse. .TP \fB\-T\fP,\ \fB\-\-total\fP Zeichnet auch eine Graphik der gesamten Speicherverwendung. .TP \fB\-\-title=\fP\fIName\fP Verwendet \fIName\fP als Titel für die Graphik. .TP \fB\-x\ \fP\fIGröße\fP,\ \fB\-\-x\-size=\fP\fIGröße\fP Setzt die Breite der Graphik auf \fIGröße\fP Pixel. .TP \fB\-y\ \fP\fIGröße\fP,\ \fB\-\-y\-size=\fP\fIGröße\fP Setzt die Höhe der Graphik auf \fIGröße\fP Pixel. .SH EXIT\-STATUS Der Exit\-Status von \fBmemusage\fP ist identisch zu dem Exit\-Status des profilierten Programms. .SH FEHLER Um Fehler (auf Englisch) zu melden, siehe .UR http://www.gnu.org/software/libc/bugs.html .UE .SH BEISPIELE Es folgt ein einfaches Programm, das zyklisch Speicherblöcke neu reserviert, die zu einer Spitzenbelastung ansteigen und dann zyklisch kleinere Speicherblöcke neu reserviert, die auf Null zurückkehren. Nach der Kompilierung und Ausführung der folgenden Befehle, ist eine Graphik der Speicherverwendung des Programms in der Datei \fImemusage.png\fP verfügbar: .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 Programmquelltext .EX #include #include \& #define CYCLES 20 \& int main(int argc, char *argv[]) { int i, j; size_t size; int *p; \& size = sizeof(*p) * 100; printf("malloc: %zu\en", 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\en", size); p = realloc(p, size); \& size = sizeof(*p) * ((j + 1) * 150 + 110); printf("realloc: %zu\en", size); p = realloc(p, size); } \& free(p); exit(EXIT_SUCCESS); } .EE .SH "SIEHE AUCH" \fBmemusagestat\fP(1), \fBmtrace\fP(1), \fBld.so\fP(8) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .