Por que o valor de VSIZE na parte superior é diferente do valor de VSZ (tamanho do conjunto virtual) em ps?

9

Eu sei que VSZ in psé para o espaço total de endereços alocado para o aplicativo e às vezes é aliasizado como vsize (mencionado na página de manual do pslinux), mas qual é a definição de VSIZE top? Esta saída superior do iPhone é diferente da superior no Linux:

 PID COMMAND      %CPU   TIME   #TH #PRTS #MREGS  RPRVT  RSHRD  RSIZE  VSIZE
 1875 emma         0.0%  0:30.83   7   139    932 17868K  5328K    29M   181M

root# ps -eo pid,rss,vsz|grep 1875
 1875  29324   441324
Ralph Wen
fonte
Não consigo reproduzir isso em nenhuma das minhas máquinas darwin. Isso me faz pensar que o shell que eles configuraram no iphone tinha um conjunto de tamanho de bloco estranho?
polinomial
eles parecem estar calculando o RSIZE / rss da mesma maneira, mas o ps está relatando um vsz 2,5x maior que o relatado pela parte superior. talvez topno IOS não inclua objetos compartilhados no vsize, ou algo assim.
Tim Kennedy
"Esta saída superior do iPhone é diferente da saída superior do Linux" - não é uma surpresa, é?
Poige 23/05

Respostas:

5

O sistema de memória Linux é preenchido com muitas rotinas de utilitários de otimização de memória e compartilhamento de memória, criando uma idéia complicada de como a memória é compartilhada e consumida, uma abordagem complicada. A saída de ps e outros comandos relacionados ao ps aumentam sua saída a partir de dados no /procsistema de arquivos. Particularmenteps, RSS (memória de tamanho residente) e VSIZE (tamanho da memória virtual) são importantes, no entanto, o VSIZE não mostra o uso exato da memória e a diferença entre VSIZE e rss é o que é realmente destinado e alocado ao programa durante a inicialização, mas ainda não pode ser referenciado. Como o programa pode ter muitas bibliotecas vinculadas, mas elas ainda não foram carregadas porque ainda não foram referenciadas no tempo de execução do programa. O RSS fornece a memória total realmente usada pelo programa, mas pode não fornecer uma imagem real do consumo de memória, pois a maior parte da memória alocada pode ser compartilhada com outras instâncias do mesmo processo ou de outros processos. Olhar para baixo /proc/<processid>/mapspode dar uma idéia aproximada de como a memória foi usada, mas elas podem ser enganosas às vezes. Usarpmap -x <pid> na linha de comando, é útil ver a propagação.

Os utilitários frequentemente melhores são freee vmstat. freefornecerá detalhes gerais sobre o consumo atual de memória e o vmstat pode ser usado para ver com que frequência ele está sendo atualizado.

Nikhil Mulley
fonte
Outra razão ou explicação cuidadosa por que o ps NÃO deve ser considerado como fornecendo o uso correto da memória do processo. Leia isto em virtualthreads.blogspot.com/2006/02/…
Nikhil Mulley
2
O que o pôster desta resposta está tentando dizer é que a definição de memória usada é complexa e variada. Não há um único local no kernel onde ele é rastreado e relatado. Os utilitários executam sua própria interpretação das inúmeras estatísticas relatadas pelo kernel.
11373 Johan