pss在/ proc / pid / smaps中是什么意思

我对/ proc / pid / smaps中的pss列感到困惑,因此我编写了一个程序对其进行测试:

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,但是我想知道为什么。

顺便说一句:是否有任何详细的文档smaps

回答:

从wnn.net报价

进程的“比例集大小”(PSS)是它在内存中具有的页面数,其中每个页面除以共享它的进程数。因此,如果一个进程自身拥有1000页,并且与另一个进程共享1000页,则其PSS将为1500

从Linux内核文档中,

/proc/PID/smaps是基于在地图上的一个延伸,示出了用于每个进程的映射的内存消耗。对于每个映射,都有一系列行,如下所示:

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

这些行的第一行显示的信息与 的映射显示的信息相同。其余各行显示映射的大小(

),当前驻留在RAM中的映射的数量( ),进程在此映射中的比例份额( ),映射。请注意,即使页面是

映射的一部分,但仅映射了一个pte,即当前仅由一个进程使用,也被视为私有而不是共享。“已

”表示当前标记为已引用或已访问的内存量。” “显示不属于任何文件的内存量。甚至与文件关联的映射也可能包含匿名页面:修改

和页面后,文件页面将被私有匿名副本替换。“ ”显示如何还使用了很多将要匿名的内存,但是在交换时就用完了。

关于Unix and

LinuxStackexchange的问题几乎涵盖了这个主题。请参阅Mat的出色回答,这肯定会消除您的所有疑问。

以上是 pss在/ proc / pid / smaps中是什么意思 的全部内容, 来源链接: utcz.com/qa/415390.html

回到顶部