RSS é quanta memória este processo tem atualmente na memória principal (RAM). VSZ é quanta memória virtual o processo tem no total. Isso inclui todos os tipos de memória, tanto na RAM quanto trocados. Esses números podem ficar distorcidos porque também incluem bibliotecas compartilhadas e outros tipos de memória. Você pode ter quinhentas instâncias de bash
em execução e o tamanho total de sua memória ocupada não será a soma de seus valores RSS ou VSZ.
Se você precisar ter uma ideia mais detalhada sobre o footprint de memória de um processo, terá algumas opções. Você pode passar por /proc/$PID/map
e eliminar as coisas que não gosta. Se forem bibliotecas compartilhadas, o cálculo pode ficar complexo dependendo de suas necessidades (o que eu acho que me lembro).
Se você se preocupa apenas com o tamanho de heap do processo, pode sempre analisar apenas a entrada [heap]
no arquivo map
. O tamanho que o kernel alocou para o heap do processo pode ou não refletir o número exato de bytes que o processo pediu que seja alocado. Há detalhes minuciosos, internos do kernel e otimizações que podem eliminar isso. Em um mundo ideal, ele será o máximo que o processo precisa, arredondado para o múltiplo mais próximo do tamanho da página do sistema ( getconf PAGESIZE
dirá o que é - em PCs, provavelmente é 4.096 bytes).
Se você quiser ver quanta memória um processo tem alocado , uma das melhores maneiras é abrir mão das métricas do lado do kernel. Em vez disso, você instrumenta as funções de alocação de memória (de) de heap da biblioteca C com o mecanismo LD_PRELOAD
. Pessoalmente, eu ofereço um pouco de valgrind
para obter informações sobre esse tipo de coisa. (Observe que a aplicação da instrumentação exigirá a reinicialização do processo).
Por favor, note que você também pode testar tempos de execução, que valgrind
irá tornar seus programas um pouco mais lentos (mas provavelmente dentro de suas tolerâncias).