memusage(1) General Commands Manual memusage(1) NUME memusage - profilul utilizarii memoriei de catre un program REZUMAT memusage [opiune]... program [opiune-program]... DESCRIERE memusage este un script bash care face profilul utilizarii memoriei programului program. Acesta preincarca biblioteca libmemusage.so in mediul apelantului (prin intermediul variabilei de mediu LD_PRELOAD; a se vedea ld.so(8)). Biblioteca libmemusage.so urmarete alocarea memoriei prin interceptarea apelurilor la malloc(3), calloc(3), free(3) i realloc(3); opional, pot fi interceptate i apelurile la mmap(2), mremap(2) i munmap(2). memusage poate afia datele colectate sub forma de text sau poate utiliza memusagestat(1) (a se vedea opiunea -p, mai jos) pentru a crea un fiier PNG care conine o reprezentare grafica a datelor colectate. Rezumatul utilizarii memoriei Linia ,,Memory usage summary" produsa de memusage conine trei campuri: heap total Suma argumentelor dimensiune din toate apelurile malloc(3), produsul argumentelor (nmemb*dimensiune) din toate apelurile calloc(3) i suma argumentelor lungime din toate apelurile mmap(2). In cazul apelurilor realloc(3) i mremap(2), in cazul in care noua dimensiune a unei alocari este mai mare decat dimensiunea anterioara, se adauga suma tuturor acestor diferene (noua dimensiune minus vechea dimensiune). heap peak Maximul tuturor argumentelor dimensiune din malloc(3), al tuturor produselor nmemb*dimensiune din calloc(3), al tuturor argumentelor dimensiune din realloc(3), al argumentelor lungime din mmap(2) i al argumentelor dimensiunea_noua din mremap(2). stack peak Inainte de primul apel la orice funcie monitorizata, se salveaza adresa indicatorului de stiva (indicatorul stivei de baza). Dupa fiecare apel de funcie, se citete adresa reala a indicatorului de stiva i se calculeaza diferena faa de indicatorul de baza al stivei. Valoarea maxima a acestor diferene reprezinta apoi varful stivei. Imediat dupa aceasta linie de rezumat, un tabel prezinta numarul de apeluri, memoria totala alocata sau eliberata i numarul de apeluri euate pentru fiecare funcie interceptata. Pentru realloc(3) i mremap(2), campul suplimentar ,,nomove" arata realocarile care au schimbat adresa unui bloc, iar campul suplimentar ,,dec" arata realocarile care au scazut dimensiunea blocului. Pentru realloc(3), campul suplimentar ,,free" indica realocarile care au dus la eliberarea unui bloc (adica dimensiunea realocata a fost 0). Coloana ,,realloc/total memory" din tabelul generat de memusage nu reflecta cazurile in care realloc(3) este utilizat pentru a realoca un bloc de memorie pentru a avea o dimensiune mai mica decat cea anterioara. Acest lucru poate face ca suma tuturor celulelor ,,total memory" (cu excepia celulei ,,free") sa fie mai mare decat cea a celulei ,,free/total memory". Histograma pentru dimensiunile blocurilor ,,Histogram for block sizes" ofera o defalcare a alocarilor de memorie in pachete de diferite dimensiuni. OPIUNI -n nume, --progname=nume Numele fiierului de program de profilat. -p fiier, --png=fiier Genereaza un grafic PNG i il stocheaza in fiier. -d fiier, --data=fiier Genereaza un fiier de date binare i il stocheaza in fiier. -u, --unbuffered Fara memorie tampon la ieire. -b dimensiune, --buffer=dimensiune Colecteaza intrarile dimensiune inainte de a le scrie. --no-timer Dezactiveaza eantionarea pe baza de temporizator (SIGPROF) a valorii indicatorului de stiva. -m, --mmap De asemenea, urmarete mmap(2), mremap(2) i munmap(2). -?, --help Afieaza mesajul de ajutor i iese. --usage Imprima un mesaj scurt de utilizare i iese. -V, --version Imprima informaiile de versiune i iese Urmatoarele opiuni se aplica numai atunci cand se genereaza o ieire grafica: -t, --time-based Utilizeaza timpul (mai degraba decat numarul de apeluri de funcii) ca scala pentru axa X. -T, --total Deseneaza, de asemenea, un grafic al utilizarii totale a memoriei. --title=nume Utilizeaza nume ca titlu in interiorul graficului. -x dimensiunea, --x-size=dimensiunea Face ca graficul sa aiba o laime de dimensiunea pixeli. -y dimensiunea, --y-size=dimensiunea Face ca graficul sa aiba o inalime de dimensiunea pixeli. STARE DE IEIRE Starea de ieire a memusage este egala cu starea de ieire a programului profilat. ERORI Pentru a raporta erori, consultai EXEMPLE Mai jos este prezentat un program simplu care realoca un bloc de memorie in cicluri care cresc pana la un varf inainte de a realoca ciclic memoria in blocuri mai mici care revin la zero. Dupa compilarea programului i rularea urmatoarelor comenzi, in fiierul memusage.png se poate gasi un grafic al utilizarii memoriei programului: $ 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 Sursa programului #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); } CONSULTAI I memusagestat(1), mtrace(1), ld.so(8) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 memusage(1)