问题描述
我对/proc/pid/smaps中的pss列感到困惑,所以我编写了一个程序对其进行测试:
I was confused about the pss column in /proc/pid/smaps, so I wrote a program to test it:
void sa();
int main(int argc,char *argv[])
{
int fd;
sa();
sleep(1000);
}
void sa()
{
char *pi=new char[1024*1024*10];
for(int i=0;i<4;++i) {
for(int j=0;j<1024*1024;++j){
*pi='o';
pi++;
}
}
int cnt;
for(int i=0;i<6;++i) {
for(int j=0;j<1024*1024;++j){
cnt+=*pi;
pi++;
}
}
printf("%d",cnt);
}
$cat /proc/`pidof testprogram`/smaps
08838000-0885b000 rw-p 00000000 00:00 0 [heap]
Size: 140 kB
Rss: 12 kB
Pss: 12 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 12 kB
Referenced: 12 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
b6dcd000-b77d0000 rw-p 00000000 00:00 0
Size: 10252 kB
Rss: 10252 kB
Pss: 4108 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 4108 kB
Referenced: 4108 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
在这里,我发现pss等于Private_Dirty,但我想知道为什么.
Here I found pss equal to Private_Dirty, but I wonder why.
顺便说一句:smaps
是否有详细的文献资料?
BTW: is there any detailed documention for smaps
?
推荐答案
从 lwn.net 引用
来自 Linux内核文档,
/proc/PID/smaps
是基于地图的扩展,显示了内存 每个流程映射的消耗.对于每个映射 是以下几行:
The /proc/PID/smaps
is an extension based on maps, showing the memory consumption for each of the process's mappings. For each of mappings there is a series of lines such as the following:
08048000-080bc000 r-xp 00000000 03:02 13130 /bin/bash
Size: 1084 kB
Rss: 892 kB
Pss: 374 kB
Shared_Clean: 892 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 0 kB
Referenced: 892 kB
Anonymous: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 374 kB
此问题在Unix and Linux
上,Stackexchange涵盖了几乎所有主题.请参阅Mat的出色回答,这肯定会清除您的所有疑问.
This Question on Unix and Linux
Stackexchange covers almost the topic. See Mat's excellent answer which will surely clear all your doubts.
这篇关于pss在/proc/pid/smaps中是什么意思的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!