Linux内存管理中的RSS和VSZ是什么?在多线程环境中,如何管理和跟踪这两者?
原文由 tuban 发布,翻译遵循 CC BY-SA 4.0 许可协议
Linux内存管理中的RSS和VSZ是什么?在多线程环境中,如何管理和跟踪这两者?
原文由 tuban 发布,翻译遵循 CC BY-SA 4.0 许可协议
7 回答5.4k 阅读
4 回答4.1k 阅读
2 回答5.9k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
1 回答2.4k 阅读✓ 已解决
2 回答834 阅读✓ 已解决
2 回答3.3k 阅读
RSS 是驻留集大小,用于显示为该进程分配了多少内存并且在 RAM 中。它不包括被换出的内存。只要这些库中的页面实际上在内存中,它就包含来自共享库的内存。它确实包括所有堆栈和堆内存。
VSZ 是虚拟内存大小。它包括进程可以访问的所有内存,包括已换出的内存、已分配但未使用的内存以及来自共享库的内存。
因此,如果进程 A 有 500K 的二进制文件并链接到 2500K 的共享库,则有 200K 的堆栈/堆分配,其中 100K 实际上在内存中(其余的被交换或未使用),它实际上只加载了 1000K 的共享库然后是 400K 自己的二进制文件:
由于部分内存是共享的,因此许多进程可能会使用它,因此如果将所有 RSS 值相加,您很容易得到比系统更多的空间。
在程序实际使用之前,分配的内存也可能不在 RSS 中。因此,如果您的程序预先分配了一堆内存,然后随着时间的推移使用它,您会看到 RSS 上升而 VSZ 保持不变。
还有PSS(proportional set size)。这是一种较新的度量,它跟踪共享内存作为当前进程使用的比例。因此,如果之前有两个进程使用相同的共享库:
线程都共享相同的地址空间,因此每个线程的 RSS、VSZ 和 PSS 与进程中的所有其他线程相同。使用 ps 或 top 在 linux/unix 中查看此信息。
还有比这更多的方法,要了解更多信息,请查看以下参考资料:
另见: