我有一个用C编写的守护程序,在RHEL 4机器下运行。
守护进程访问一段共享内存(不过是一个由65536个元素组成的大数组)。没有malloc/free完成。
我观察到ps-aux显示守护进程的大小为共享内存+一些kb作为VSZ,而只有一些kb作为RSS。
然后,守护进程访问共享内存阵列的次数越多,RSS增加的次数就越多,直到达到大约相同大小的VSZ。
为什么Linux会以这种方式计算RSS?
我的意思是。。。共享内存不应该被忽略为单个进程消耗的内存(RSS),因为它可以被许多其他可运行程序访问?
为什么它提出RSS只是访问共享内存?
RSS是映射到进程的物理内存的数量。
Linux采用需求分页,因此物理内存只在第一次访问时进行映射。VSZ是一种虚拟内存,可根据需要由物理内存进行备份。这就解释了为什么RSS会随着您访问更多共享内存映射而增长。