我有一个用 C 编写的守护进程,在 RHEL 4 机器下运行。
守护进程访问一段共享内存(只不过是一个包含 65536 个元素的大数组)。没有进行 malloc/free。
我观察到ps aux显示守护进程具有共享内存的大小+一些kb作为VSZ和一些kb作为RSS。
然后,守护进程访问共享内存阵列越多,RSS 增加得越多,直到达到大约与 VSZ 相同的大小。
Linux为什么要这样计算RSS?
我的意思是...共享内存不应该被忽略为单个进程消耗的内存(RSS),因为它可以被许多其他可运行程序访问?
为什么它会在访问共享内存时引发 RSS?
最佳答案
RSS 是映射到进程的物理内存量。
Linux 使用 demand paging这样物理内存仅在第一次访问时被映射。 VSZ 是虚拟内存,按需由物理内存支持。这解释了为什么您的 RSS 随着您访问更多共享内存映射而增长。
关于Linux RSS 和共享内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11428115/