Linux内存管理中的RSS和VSZ是什么

新手上路,请多包涵

Linux内存管理中的RSS和VSZ是什么?在多线程环境中,如何管理和跟踪这两者?

原文由 tuban 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 809
1 个回答

RSS 是驻留集大小,用于显示为该进程分配了多少内存并且在 RAM 中。它不包括被换出的内存。只要这些库中的页面实际上在内存中,它就包含来自共享库的内存。它确实包括所有堆栈和堆内存。

VSZ 是虚拟内存大小。它包括进程可以访问的所有内存,包括已换出的内存、已分配但未使用的内存以及来自共享库的内存。

因此,如果进程 A 有 500K 的二进制文件并链接到 2500K 的共享库,则有 200K 的堆栈/堆分配,其中 100K 实际上在内存中(其余的被交换或未使用),它实际上只加载了 1000K 的共享库然后是 400K 自己的二进制文件:

 RSS: 400K + 1000K + 100K = 1500K
VSZ: 500K + 2500K + 200K = 3200K

由于部分内存是共享的,因此许多进程可能会使用它,因此如果将所有 RSS 值相加,您很容易得到比系统更多的空间。

在程序实际使用之前,分配的内存也可能不在 RSS 中。因此,如果您的程序预先分配了一堆内存,然后随着时间的推移使用它,您会看到 RSS 上升而 VSZ 保持不变。

还有PSS(proportional set size)。这是一种较新的度量,它跟踪共享内存作为当前进程使用的比例。因此,如果之前有两个进程使用相同的共享库:

 PSS: 400K + (1000K/2) + 100K = 400K + 500K + 100K = 1000K

线程都共享相同的地址空间,因此每个线程的 RSS、VSZ 和 PSS 与进程中的所有其他线程相同。使用 ps 或 top 在 linux/unix 中查看此信息。

还有比这更多的方法,要了解更多信息,请查看以下参考资料:

另见:

原文由 jmh 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏