Páginas limpas são páginas que não foram modificadas desde que foram mapeadas (normalmente, as seções de texto das bibliotecas compartilhadas são lidas somente a partir do disco (quando necessário), nunca modificadas, portanto, elas estarão em páginas limpas e compartilhadas). br> Páginas sujas são páginas que não são limpas (ou seja, foram modificadas).
As páginas privadas estão disponíveis apenas para esse processo, as páginas compartilhadas são mapeadas por outros processos * .
RSS é o número total de páginas, compartilhadas ou não, atualmente mapeadas no processo. Portanto, Shared_Clean
+ Shared_Dirty
seria a parte compartilhada do RSS (ou seja, a parte do RSS que também é mapeada em outros processos) e Private_Clean
+ Private_Dirty
da parte privada do RSS (ou seja, apenas mapeada neste processo).
PSS (tamanho de compartilhamento proporcional) é como você descreve. As páginas privadas são somadas como estão e o tamanho de cada mapeamento compartilhado é dividido pelo número de processos que o compartilham.
Portanto, se um processo tivesse 100k páginas privadas, 500k páginas compartilhadas com outro processo e 500k compartilhado com quatro outros processos, o PSS seria:
100k + (500k / 2) + (500k / 5) = 450k
Outras leituras:
- ELC: Quanta memória as aplicações estão realmente usando?
-
Documentation/filesystems/proc.txt
na origem do kernel -
man proc(5)
- Visão geral do gerenciamento de memória do Linux
- Gerenciamento de memória em TLDP.org
- LinuxMM
Com relação às somas do processo:
-
RSS
pode ser (aproximadamente + ) obtido pela soma das entradasRss:
emsmaps
(você não precisa adicionar as entradas compartilhadas / privadas compartilhadas / sujas).awk '/Rss:/{ sum += $2 } END { print sum }' /proc/$$/smaps
- Você pode somar
Pss:
valores da mesma maneira, para obter o processo globalPSS
. -
USS
não é reportado emsmaps
, mas, na verdade, é a soma dos mapeamentos privados, portanto, você também pode obtê-lo da mesma forma
* Observe que uma página "compartilhável" é contada como um mapeamento privado até que seja realmente compartilhada. ou seja, se houver apenas um processo atualmente usando libfoo
, a seção de texto dessa biblioteca aparecerá nos mapeamentos private do processo. Ele será contabilizado nos mapeamentos compartilhados (e removido dos privados) somente se / quando outro processo começar a usar essa biblioteca.
+ Os valores não adicione exatamente para todos os processos. Não sei exatamente por que ... desculpe.