Diferença entre RSS e VSZ

Quanto de memória um processo está consumindo? R: Depende!

kingm0b_
kingm0b_
Jul 21, 2017 · 2 min read

Uma dúvida que é muito recorrente quando se estuda gerenciamento de processos no Linux é como determinar a quantidade de memória utilizada por um processo. Especialmente a diferença entre os valores RSS e VSZ.

RSS é a sigla para Resident Set Size. VSZ é a Virtual Memory Size.

RSS indica a quantidade de bytes realmente utilizados pelo processo, ou seja, a memória ocupada na RAM. O VSZ é a quantidade de memória virtual consumida pelo processo (que na maioria dos casos é sempre maior que RSS).

Verifique a quantidade de memória usada pela instância do bash corrente:

$ ps -o rss,vsz,cmd -p $$
RSS VSZ CMD
3180 116304 bash

A grande dúvida que surge é a seguinte: Se a VSZ é maior que a RSS, onde estes bytes excedentes estão armazenados? No swap? Não!

Uma das grandes sacadas da memória virtual é permitir que os processos “achem” que estão reservando espaço na memória real, sendo que na realidade não estão.

A memória alocada pela função malloc(), por exemplo, não afeta a RSS enquanto nada for escrito na memória reservada.

Para ilustrar melhor, vamos a estes códigos de exemplo:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
char command[30];
pid = getpid();
printf(" Estado inicial:\n");
snprintf(command, 30, "ps -o rss,vsz,cmd -p %d", pid);
system(command);
sleep(5);
puts("\n Reservando 1MiB de memória...\n");
char *p = malloc(1048576);
sleep(5);
snprintf(command, 30, "ps -o rss,vsz,cmd -p %d", pid);
system(command);
sleep(5);
puts("\n Limpando memória reservada...\n");
free(p);
snprintf(command, 30, "ps -o rss,vsz,cmd -p %d", pid);
system(command);
puts(""); return 0;
}

Compile com:

$ gcc virtual_memory_size.c -o virtual_memory_size

Ao executá-lo, observe como o valor VSZ aumenta e o RSS permanece:

 Estado inicial:  RSS    VSZ CMD
344 4160 ./virtual_memory_size
Reservando 1MiB de memória... RSS VSZ CMD
344 5188 ./virtual_memory_size
Limpando memória reservada... RSS VSZ CMD
512 4160 ./virtual_memory_size

Curiosidade: criando seu próprio TOP para processos que mais estão consumindo memória:

$ watch -n1 -e 'ps -axo rss,vsz,cmd --sort=-rss | head -10'

)

kingm0b_

Written by

kingm0b_

Algumas anotações pessoais (que podem ser úteis para alguém).

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade