Linux内存管理中的RSS和VSZ是什么?在多线程环境中,如何管理和跟踪这两者
RSS是常驻集大小,用于显示分配给该进程的内存量以及内存大小。它不包括换出的内存。它确实包括来自共享库的内存,只要这些库中的页面实际上在内存中。它确实包括所有堆栈和堆内存
VSZ是虚拟内存大小。它包括进程可以访问的所有内存,包括调出的内存、已分配但未使用的内存以及来自共享库的内存
因此,如果进程A有一个500K的二进制文件,并且链接到25000K的共享库,有200K的堆栈/堆分配,其中100K实际上在内存中(其余部分被交换或未使用),并且它实际上只加载了1000K的共享库和400K的它自己的二进制文件,那么:
RSS:400K+1000K+100K=1500K
VSZ:500K+2500K+200K=3200K
由于部分内存是共享的,许多进程可能会使用它,因此,如果将所有RSS值相加,很容易得到比系统更多的空间
分配的内存在程序实际使用之前也可能不在RSS中。因此,如果您的程序预先分配了一堆内存,然后随着时间的推移使用它,您可以看到RSS上升,VSZ保持不变
还有PSS(比例设置大小)。这是一个更新的度量,它跟踪当前进程使用的共享内存的比例。因此,如果以前有两个进程使用同一个共享库:
PSS:400K+(1000K/2)+100K=400K+500K+100K=1000K
所有线程都共享相同的地址空间,因此每个线程的RSS、VSZ和PSS与进程中的所有其他线程相同。使用ps或top在linux/unix中查看此信息
要了解更多信息,请查看以下参考资料:
- http://manpages.ubuntu.com/manpages/en/man1/ps.1.html
- https://web.archive.org/web/20120520221529/http://emilics.com/blog/article/mconsumption.html
另见:
- 一种确定过程的方法&39;s";“真正的”;内存使用情况,即私有脏RSS