当前位置: 首页 > 面试题库 >

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

华萧迟
2023-03-14
问题内容

我对/ 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

这些行的第一行显示的信息与 / proc / PID / maps中 的映射显示的信息相同。其余各行显示映射的大小( size
),当前驻留在RAM中的映射的数量( RSS ),进程在此映射中的比例份额( PSS ),映射。请注意,即使页面是
MAP_SHARED 映射的一部分,但仅映射了一个pte,即当前仅由一个进程使用,也被视为私有而不是共享。“已 引用
”表示当前标记为已引用或已访问的内存量。” 匿名 “显示不属于任何文件的内存量。甚至与文件关联的映射也可能包含匿名页面:修改
MAP_PRIVATE 和页面后,文件页面将被私有匿名副本替换。“ 交换 ”显示如何还使用了很多将要匿名的内存,但是在交换时就用完了。


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



 类似资料:
  • 问题内容: 我正在为Munin创建一个插件,以监视命名进程的统计信息。信息来源之一是。但是我很难找出/ 和/ 之间的区别。 它们不一样,因为它们提供不同的值。它们代表什么? 问题答案: 尽管proc联机帮助页令人遗憾地落后(大多数与cookie- cutter用户空间开发无关的联机帮助页/文档也是如此),但幸运的是,这些资料已在Linux内核源代码下的完全记录了下来。以下是相关的位:

  • 问题内容: 我正在努力弄清标题中提到的两个文件。我查了一下是什么。但是,我无法理解如何从他们那里提取有用的信息(或者我只是以错误的方式来对待)。 让我解释一下:页面映射是一个相当新的“功能”伪文件,其中包含分配给当前[pid]的虚拟页面的物理框架信息。也就是说,给定一个从地址x开始的虚拟页面,比如说“ vas”代表虚拟地址开始,我可以使用vas为页面地图文件建立索引,以获取映射的物理页面框架的64

  • 问题内容: 有没有人成功地使用Linux内核2.6 mmap’ing / proc / pid / mem文件?我收到ENODEV(无此类设备)错误。我的电话看起来像这样: 而且我在调试时通过查看/ proc / pid / maps文件进行了验证,当执行到达此调用时,offset的值等于堆栈顶部减去PAGE_SIZE的值。我还用ptrace验证了mmap将errno设置为ENODEV。 问题答案

  • 问题内容: 我已经看到了声明,接口和类 这是什么意思? 问题答案: 没有证据,我相信您在谈论Java的泛型支持… 泛型允许您抽象类型 在Java 5之前,很难提供能够支持多种不同类型的Objects的类而不必为每种特定情况编写代码,因此人们通常会这样做。 这导致在运行时做出许多困难的选择,您必须进行运行时检查以查看是否有可能将给定的Object强制转换为可用类型…例如 现在,这已经很明显了,但是如

  • 问题内容: 什么是在这个CSS规则是什么意思? 问题答案: 是相邻的同级组合器。 这意味着选择只选择自带 之后 的。 插图: 选择了什么,没有选择什么: 选择 这个来之后第一。 未选择 这出现在第一后而不是在。由于它不会立即跟随,因此未选中。 但是,由于它仍然紧随元素之后,选择器不会立即匹配此元素,而是将使用通用的同级组合器来匹配该元素。 未选择 这位于内,并且在引号内没有满足其选择器的内容。

  • 问题内容: 我想知道 = + _ 运算符在JavaScript中的含义。看起来像是在做作业。 例: 问题答案: r = +_; 尝试将任何内容强制转换为数字。 只是一个变量名(不是运算符),可以是,等等。 例: 将“ 1”强制转换为纯数字1。 现在,不是。 此外,根据算术运算符的MDN页面: 一元加号运算符位于其操作数之前,并求值为其操作数,但是 尝试将其转换为数字(如果尚未转换为数字) 。 […