Significado dos valores de tamanho e RSS na saída prstat
-
19-08-2019 - |
Pergunta
Alguém pode dar alguma explicação clara do significado do tamanho e RSS valores que recebemos de prstat no Solaris?
Eu escrevi um aplicativo de teste de C ++ que aloca memória com new[]
, preenche-lo e libera-lo com delete[]
.
Como eu entendi, o valor do tamanho deve estar relacionado com a quantidade de memória virtual foi "reservado" pelo processo, que é a memória "malloced" ou "newed".
Essa memória não resumir o valor RSS menos que eu realmente usá-lo (enchimento com alguns valores). Mas, então, mesmo se eu liberar a memória, o RSS não cair.
Eu não entendo o que semântica posso atribuir corretamente para esses 2 valores.
Solução
RSS é (AFAIK confiável) que representa a quantidade de memória física de um processo está usando. Usando alocador Solaris memória padrão, liberando memória não fazer nada sobre RSS, uma vez que apenas muda alguns ponteiros e valores para dizer que a memória é livre para ser reutilizada. Se você não usar novamente essa memória alocando-lo novamente, ele acabará por ser paginado fora eo RSS vai cair.
Se você quiser memória liberada para ser devolvido imediatamente após um livre, você pode usar o mmap alocador Solaris como esta:
export LD_PRELOAD=libumem.so
export UMEM_OPTIONS=backend=mmap
Outras dicas
Tamanho é o tamanho da memória virtual total do processo, incluindo todos os arquivos e dispositivos mapeados, e RSS deve ser o tamanho do conjunto residente, mas é completamente confiável, você deve tentar obter essa informação a partir de pmap .
Como regra geral, uma vez memória é alocada a um processo que nunca será dado de volta para o sistema operacional. Em sistemas Unix da chamada sbrk () é usado para estender o espaço de endereço de processos, e não há atendimento análogo ao ir na outra direção.