memusage(1) General Commands Manual memusage(1) NAVN memusage - lav en profil over forbruget af hukommelse for et program SYNOPSIS memusage [tilvalg]... program [programtilvalg]... BESKRIVELSE memusage er et bash-skript, der profilerer brugen af hukommelse for programmet program. Biblioteket libmemusage.so indlaeses forst i kalderens miljo (via miljovariablen LD_PRELOAD; se ld.so(8)). Biblioteket libmemusage.so registrerer hukommelsesallokering ved at opfange kald til malloc(3), calloc(3), free(3) og realloc(3); valgfrit kan kald til mmap(2), mremap(2) og munmap(2) ogsa opfanges. memusage kan vise de indsamlede data i tekstform, eller kan bruge memusagestat(1) (se tilvalget the -p, nedenfor) til at oprette en PNG-fil indeholdende grafisk repraesentation af de indsamlede data. Overblik over hukommelsesforbruget >>Overblik over hukommelsesforbruget<<-linjeresultatet fra memusage indeholder tre felter: heap total Sum af storrelse-argumenter for alle malloc(3)-kald, produkter for argumenter (nmemb*storrelse) for alle calloc(3)-kald og summen af laengde-argumenter for alle mmap(2)-kald. I tilfaeldet realloc(3) og mremap(2), hvis den nye storrelse for en allokering er storre end den tidligere storrelse, sa tilfojes summen for alle sadanne forskelle (ny storrelse minus gammel storrelse). heap peak Maksimum for alle storrelse-argumenter for malloc(3), alle produkter for nmemb*storrelse for calloc(3), alle storrelse-argumenter for realloc(3), laengde-argumenter for mmap(2) og nu_storrelse-argumenter for mremap(2). stack peak For det forste kald til enhver overvaget funktion sa gemmes stakpegeradressen (grundstakpegeren). Efter hvert funktionskald sa laeses den faktiske stakpegeradrese og forskellen fra grundstakpegeren beregnes. Maksimum for disse forskelle er hvor stakken havde toppunkt. Umiddelbart efter denne summerede linje viser en tabel antallet af kald, samlet hukommelse allokeret eller deallokeret samt antallet af mislykkede kald for hver opfanget funktion. For realloc(3) og mremap(2), viser det ekstra felt >>nomove<< reallokeringer, der aendrede adressen for en blok og det ekstra felt >>dec<< viser reallokeringer, der formindskede blokstorrelsen. For realloc(3) viser det ekstra felt >>free<< reallokeringer der fik en blok til at blive frigivet (dvs. den reallokerede storrelse var 0). >>realloc/total memory<< for tabelresultatet fra memusage reflekterer ikke tilfaelde hvor realloc(3) bruges til at reallokere en hukommelsesblok til en mindre storrelse end tidligere. Dette kan medfore at sum for alle >>total memory<<-celler (eksklusive >>free<<) er storre end >>free/total memory<<-cellen. Histogram for blokstorrelser >>Histogram for blokstorrelser<< tilbyder en nedbrydning af hukommelsesallokeringer til diverse bucket-storrelser. TILVALG -n navn, --progname=navn Navn pa programfilen der skal profileres. -p fil, --png=fil Opret PNG-grafik og lagr denne i fi. -d fil, --data=fil Opret binaer datafil og lagr denne i fil. -u, --unbuffered Mellemlagr ikke resultatet. -b storrelse, --buffer=storrelse Indsaml storrelse-elementer for de skrives. --no-timer Deaktiver timer-baseret (SIGPROF) sampling af stakpegervaerdi. -m, --mmap Registrer ogsa mmap(2), mremap(2) og munmap(2). -?, --help Vis hjaelpeteksten og afslut. --usage Vis en kort brugsbesked og afslut. -V, --version Vis versionsinformation og afslut. De folgende tilvalg er kun gaelden nar der oprettes grafik: -t, --time-based Brugstid (frem for antallet af funktionskald) som skala for x-aksen. -T, --total Tegn ogsa en graf over den samlede brug af hukommelse. --title=navn Use navn som grafens titel. -x storrelse, --x-size=storrelse Gor grafen storrelse billedpunkter bred. -y storrelse, --y-size=storrelse Gor grafen storrelse billedpunkter hoj. AFSLUT-STATUS Afslutningsstatus for memusage svarer til afslutningsstatus for det profilerede program. FEJL For at rapportere fejl, se EKSEMPLER Nedenfor er et simpelt program, der reallokerer en hukommelsesblok i cyklusser, der stiger til et toppunkt for cyklist reallokering af hukommelsen i mindre blokke, der returnerer til nul. Efter kompilering af programmet og afvikling af de folgende kommandoer kan en graf over hukommelsesforbruget findes i filen 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 Programkilde #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); } SE OGSA memusagestat(1), mtrace(1), ld.so(8) OVERSAETTELSE Oversaettere af denne manual til dansk Joe Hansen Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.8 2. maj 2024 memusage(1)