如何确定分叉进程(Linux)使用的内存?

Ton*_*yer 6 linux optimization memory

这个问题开始。Debian,如果这很重要。

我知道分叉进程之间共享了一些内存。那么我如何确定一个进程/一组分叉进程使用了​​多少内存?

使用在这个类似问题中推荐的 smem 工具,我得到如下值:

Command                         Swap      USS      PSS      RSS 
/usr/sbin/spamd --create-pr        0    16820    24974    41628
spamd chil                         0    19388    27581    44176
spamd chil                         0    32328    40038    55708
Run Code Online (Sandbox Code Playgroud)

我理解交换列,RSS 列是通常报告的(例如在 ps 中)。从阅读 smem 文档来看,USS 是专门为那个孩子准备的内存,而 PSS 是进程间共享的一部分内存。但是,将 USS 添加到 PSS 会产生比 RSS 更高的值,而且我认为共享的意义会更小(所以我可能解释不正确)。

我不依赖于 smem 工具。我只想以某种方式获得“内存使用”数字,该数字在一定程度上准确反映了进程正在使用的实际内存量。

小智 3

按比例设置大小可能是可用的每个进程的内存使用的最佳数字。它是唯一的设置大小+(共享页面/共享进程数)。

因此,一个进程已使用 44176 个页面,其中 19388 个页面是该进程独有的。这意味着 24788 已与其他人共享。

将 PSS 视为 USS +(共享权重)。本例中的权重为 8193,这是该进程所占共享内存页面 (24788) 的比例。共享页面的应用程序实例越多,每个进程的权重就越低。

您可以跨多个进程对 PSS 求和,并且不会多次计算共享页面。但是,您不能将 USS 和 PSS 相加并期望 RSS,因为 PSS 已经包含 USS。