我正在一个容器的* nix上运行一些程序,并试图精确计算我的进程正在使用的RAM数量。 这是我的理解,这个信息应该在/proc/#{pid}/smaps 。 我试过使用这个Ruby脚本在系统上总结所有smaps文件的PSS: https : smaps
但是我看到内存使用情况被报告为低于我的容器报告。 如果我切换到使用RSS,那么值变得更高(对我的容器报告的方式)。 我相当肯定,我需要的所有信息都可以在/proc ,我只是不知道它是如何得到一个准确的测量报告。 我的问题是:我应该总结什么样的价值,因为PSS本身并不是一个好的指标? 有一个更好或更准确的方式来获得这个信息从一台Linux机器?
RSS是驻留集的大小,换句话说,进程使用的全局内存包括运行时加载的每个库。 单个库可能会被使用多次(例如,考虑Apache进程分叉,每个subprocess可能使用相同的库)。 根据虚拟内存模型,每个进程都将这个内存看作是自己使用的。 实际上,内核将虚拟内存地址映射到库的唯一内存地址。
另一方面,PSS将一个进程的每个USS(非共享集大小)相加。 把它想象成一个进程将立即释放的内存,如果我们杀了它。 它没有考虑到共享内存,但只有内存的过程是独特的使用。
因此,RSS值会高估所使用的有效内存。 PSS更准确,如果你确保考虑到加载的库的内存大小。
更多细节在这里 ,特别是在最后一段。