[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: