memusage(1) General Commands Manual memusage(1) BEZEICHNUNG memusage - Speicherverwendung eines Programms profilieren UBERSICHT memusage [Option] Programm [Programmoption] BESCHREIBUNG memusage ist ein bash(1)-Skript, das die Speicherverwendung des Programms Programm profiliert. Es ladt die Bibliothek libmemusage.so vorab in die Umgebung des Aufrufenden (mittels der Umgebungsvariablen LD_PRELOAD, siehe ld.so(8)). Die Bibliothek libmemusage.so verfolgt die Speicherbelegungen mittels Abfangens der Aufrufe von malloc(3), calloc(3), free(3) und realloc(3) nach; optional konnen auch die Aufrufe von mmap(2), mremap(2) und munmap(2) abgefangen werden. memusage kann die gesammelten Daten in textueller Form ausgeben oder es kann (mittels der nachfolgend beschriebenen Option -p) memusagestat(1) verwenden, um eine PNG-Datei zu erstellen, die die graphische Darstellung der gesammelten Daten enthalt. Speicherverwendungszusammenfassung Die von memusage ausgegebene Zeile >>Memory usage summary<< enthalt drei Felder: heap total Summe der Argumente Grosse fur alle malloc(3)-Aufrufe; Produkte der Argumente (nmemb*Grosse) aller calloc(3)-Aufrufe und die Summe aller Argumente Lange aller mmap(2)-Aufrufe. Im Falle von realloc(3) und mremap(2) wird die Summe aller Differenzen (neue Grosse minus alter Grosse) hinzugefugt, falls die neue Grossenreservierung die vorherige Grosse uberschreitet. heap peak Maximum aller Argumente Grosse aller malloc(3), alle Produkte von nmemb*Grosse von calloc(3), aller Argumente Grosse von realloc(3), Argumente Lange von mmap(2) und Argumente neue_Grosse von mremap(2). stack peak Vor dem erstmaligen Aufruf jeder uberwachten Funktion wird die Adresse des Stapel-Zeigers (Basis-Stapelzeiger) gesichert. Nach jedem Funktionsaufruf wird die tatsachliche Adresse gelesen und die Differenz zum Basis-Stapelzeiger berechnet. Das Maximum dieser Differenzen ist der >>stack peak<<. Direkt nach dieser Zusammenfassungszeile zeigt eine Tabelle die Anzahl der Aufrufe, den insgesamt reservierten oder freigegebenen Speicher und die Anzahl der fehlgeschlagenen Aufrufe fur jede abgefangene Funktion. Fur realloc(3) und mremap(2) zeigt das zusatzliche Feld >>nomove<< die Umreservierungen, die die Adresse eines Blocks anderten und das zusatzliche Feld >>dec<< zeigt die Umreservierungen, die die Grosse eines Blocks verkleinerten. Fur realloc(3) zeigt das zusatzliche Feld >>free<< die Umreservierungen, die zur Freigabe eines Blocks fuhrten (d.h. die umreservierte Grosse war 0). Das >>realloc/total memory<< der Tabellenausgabe von memusage berucksichtigt Falle nicht, bei denen realloc(3) zur Umreservierung eines Speicherblocks zur Verkleinerung der vorherigen Grosse verwandt wird. Dies kann zu einer Summe von allen >>total memory<<-Zellen fuhren (ausschliesslich >>free<<), die grosser als die Zelle >>free/total memory<< ist. Histogramm fur Blockgrossen Das >>Histogram for block sizes<< stellt eine Aufteilung der Speicherreservierungen in verschiedene Topfgrossen dar. OPTIONEN -n Name, --progname=Name Name des zu profilierenden Programms. -p Datei, --png=Datei Erstellt eine PNG-Graphik und speichert sie in Datei. -d Datei, --data=Datei Erstellt eine binare Datendatei und speichert sie in Datei. -u, --unbuffered Puffert die Ausgabe nicht. -b Grosse, --buffer=Grosse Sammelt Grosse Eintrage, bevor sie herausgeschrieben werden. --no-timer Deaktiviert Timer-basierte (SIGPROF) Probennahme des Stapelzeigerwertes. -m, --mmap Verfolgt mmap(2), mremap(2) und munmap(2) auch nach. -?, --help Hilfe ausgeben und beenden. --usage Gibt eine kurze Gebrauchsinformation aus und beendet sich. -V, --version Gibt Versionsinformationen aus und beendet sich. Die folgenden Optionen sind nur bei der Erstellung graphischer Ausgaben relevant: -t, --time-based Verwendet die Zeit (anstelle der Anzahl der Funktionsaufrufe) als Skala fur die X-Achse. -T, --total Zeichnet auch eine Graphik der gesamten Speicherverwendung. --title=Name Verwendet Name als Titel fur die Graphik. -x Grosse, --x-size=Grosse Setzt die Breite der Graphik auf Grosse Pixel. -y Grosse, --y-size=Grosse Setzt die Hohe der Graphik auf Grosse Pixel. EXIT-STATUS Der Exit-Status von memusage ist identisch zu dem Exit-Status des profilierten Programms. FEHLER Um Fehler (auf Englisch) zu melden, siehe BEISPIELE Es folgt ein einfaches Programm, das zyklisch Speicherblocke neu reserviert, die zu einer Spitzenbelastung ansteigen und dann zyklisch kleinere Speicherblocke neu reserviert, die auf Null zuruckkehren. Nach der Kompilierung und Ausfuhrung der folgenden Befehle, ist eine Graphik der Speicherverwendung des Programms in der Datei memusage.png verfugbar: $ 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 Programmquelltext #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\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); } SIEHE AUCH memusagestat(1), mtrace(1), ld.so(8) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Helge Kreutzmann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.8 2. Mai 2024 memusage(1)