memusage(1) General Commands Manual memusage(1)

memusage - lav en profil over forbruget af hukommelse for et program

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 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 repræsentation af de indsamlede data.

»Overblik over hukommelsesforbruget«-linjeresultatet fra memusage indeholder tre felter:

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).
Før det første kald til enhver overvåget funktion så gemmes stakpegeradressen (grundstakpegeren). Efter hvert funktionskald så læses 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 ændrede adressen for en blok og det ekstra felt »dec« viser reallokeringer, der formindskede blokstørrelsen. For realloc(3) viser det ekstra felt »free« reallokeringer der fik en blok til at blive frigivet (dvs. den reallokerede størrelse var 0).

»realloc/total memory« for tabelresultatet fra memusage reflekterer ikke tilfælde hvor realloc(3) bruges til at reallokere en hukommelsesblok til en mindre størrelse end tidligere. Dette kan medføre at sum for alle »total memory«-celler (eksklusive »free«) er større end »free/total memory«-cellen.

»Histogram for blokstørrelser« tilbyder en nedbrydning af hukommelsesallokeringer til diverse bucket-størrelser.

Navn på programfilen der skal profileres.
Opret PNG-grafik og lagr denne i fi.
Opret binær datafil og lagr denne i fil.
Mellemlagr ikke resultatet.
Indsaml størrelse-elementer før de skrives.
Deaktiver timer-baseret (SIGPROF) sampling af stakpegerværdi.
Registrer også mmap(2), mremap(2) og munmap(2).
-?--help
Vis hjælpeteksten og afslut.
Vis en kort brugsbesked og afslut.
Vis versionsinformation og afslut.
Brugstid (frem for antallet af funktionskald) som skala for x-aksen.
Tegn også en graf over den samlede brug af hukommelse.
Use navn som grafens titel.
Gør grafen størrelse billedpunkter bred.
Gør grafen størrelse billedpunkter høj.

Afslutningsstatus for memusage svarer til afslutningsstatus for det profilerede program.

For at rapportere fejl, se http://www.gnu.org/software/libc/bugs.html

Nedenfor er et simpelt program, der reallokerer en hukommelsesblok i cyklusser, der stiger til et toppunkt før cyklist reallokering af hukommelsen i mindre blokke, der returnerer til nul. Efter kompilering af programmet og afvikling af de følgende 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

#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)

Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>

Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR.

Hvis du støder på fejl i oversættelsen af ​​denne vejledning, skal du sende en besked til debian-l10n-danish@lists.debian.org.

25. november 2024 Linux man-pages 6.12