Re: VSZ vs RSS
Em 04/01/08, Junior Polegato - Linux<linux@juniorpolegato.com.br> escreveu:
> Denis escreveu:
> > Alguem pode me explicar a diferença real entre vsz e rss?
> > É o programa que está em execução que estima o valor de VSZ?
> > Quando um programa aloca uma qtd de memória, esta qtdd é VSZ ou RSS ?
> > qdo um programa desaloca a qtd de memória, ela deveria sersubtraida
> > imediatamente observando um ps aux?
>
> Olá,
>
> VSZ é virtual, ou seja, quando um programa requisita ao SO uma
> certa quantidade de memória, ele registra esse fato mas não a aloca na
> memória real. Quanto o programa fizer uma escrita, aí sim o SO vai
> alocar na memória real, mas por páginas, visando não alocar todo o
> requerido quando é escrito apenas um byte. Veja que quem faz todo o
> trabalho com a memória é o SO, que no caso o Linux, faz paginação de
> forma a aproveitar melhor a memória e já faz a tradução de endereço
> eficiente entre o programa e a memória real, assim, não se preocupe com
> a memória não usada em VSZ, mas cuide bem da RSS.
>
> Para que fique claro e exemplificado melhor, vai o resultado:
>
> $ gcc -Wall memoria.c -o memoria && ./memoria
>
> Requerido 10MB de memória!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 1.0 0.3 12592 1360 pts/7 S 13:36 0:00 ./memoria
> 500 11455 13.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Requerido 10MB de memória!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 1.0 0.3 22836 1364 pts/7 S 13:36 0:00 ./memoria
> 500 11456 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Requerido 10MB de memória!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 1.0 0.3 33080 1368 pts/7 S 13:36 0:00 ./memoria
> 500 11457 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Requerido 10MB de memória!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 1.0 0.3 43324 1372 pts/7 S 13:36 0:00 ./memoria
> 500 11458 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Escrito na posição de 1MB da última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 1.0 0.3 43324 1376 pts/7 S 13:36 0:00 ./memoria
> 500 11459 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Escrito na posição de 10MB da última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 0.5 0.3 43324 1380 pts/7 S 13:36 0:00 ./memoria
> 500 11460 14.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Zerando os primeiros 1MB da última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 0.5 0.6 43324 2400 pts/7 S 13:36 0:00 ./memoria
> 500 11461 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Zerando os últimos 1MB da última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 0.5 0.8 43324 3424 pts/7 S 13:36 0:00 ./memoria
> 500 11462 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Lendo 1MB no meio da última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 0.5 0.8 43324 3424 pts/7 S 13:36 0:00 ./memoria
> 500 11463 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Zerando a última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 2.0 3.0 43324 11612 pts/7 S 13:36 0:00 ./memoria
> 500 11464 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
> Liberando a última alocação!
> USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
> 500 10534 0.0 0.4 2908 1684 pts/7 S 12:52 0:00 /bin/bash
> 500 11454 2.5 0.3 33080 1368 pts/7 S 13:36 0:00 ./memoria
> 500 11465 0.0 0.2 2848 980 pts/7 R 13:36 0:00 ps u
>
>
>
> O código é esse:
>
>
> #include <stdlib.h>
> #include <stdio.h>
> #include <string.h>
>
> #define MB 1024*1024
>
> int main(int argc, char* argv[]){
> char *teste;
> char temp[MB];
> bzero(temp, MB);
>
> printf("\nRequerido 10MB de memória!\n");
> teste = (char*)malloc(10*MB);
> system("ps u");
>
> printf("\nRequerido 10MB de memória!\n");
> teste = (char*)malloc(10*MB);
> system("ps u");
>
> printf("\nRequerido 10MB de memória!\n");
> teste = (char*)malloc(10*MB);
> system("ps u");
>
> printf("\nRequerido 10MB de memória!\n");
> teste = (char*)malloc(10*MB);
> system("ps u");
>
> printf("\nEscrito na posição de 1MB da última alocação!\n");
> teste[MB-1] = 'X';
> system("ps u");
>
> printf("\nEscrito na posição de 10MB da última alocação!\n");
> teste[10*MB-1] = 'Y';
> system("ps u");
>
> printf("\nZerando os primeiros 1MB da última alocação!\n");
> bzero(teste, MB);
> system("ps u");
>
> printf("\nZerando os últimos 1MB da última alocação!\n");
> bzero(teste+9*MB, MB);
> system("ps u");
>
> printf("\nLendo 1MB no meio da última alocação!\n");
> memcpy(temp, teste+4*MB, MB);
> system("ps u");
>
> printf("\nZerando a última alocação!\n");
> bzero(teste, 10*MB);
> system("ps u");
>
> printf("\nLiberando a última alocação!\n");
> free(teste);
> system("ps u");
>
> return 0;
> }
>
>
>
>
>
> --
> Atenciosamente,
>
> Junior Polegato
>
> Um peregrino de problemas; Um pergaminho de soluções!
> Página Profissional: http://www.juniorpolegato.com.br
>
Junior, valeu pelo seu tempo. Vou ler com atenção, e se pintar alguma
dúvida escrevo de novo.
--
Denis Anjos.
Cisco Certified Network Associate.
Universidade Federal do ABC
Santo André - SP - BR
Reply to: