如何测量没有写入时复制页面的内存?

如何测量一组(分叉)进程占用的RSS总内存,而不是对共享和写时复制页面进行重复计算?

我结束了写这个我自己的工具: https : //gist.github.com/Eugeny/04ccfe8accf4bc74b0ca

我运行它反对init (pid 1)进行testing,总的报告大致等于物理ram的使用(按htop),所以我想这是正确的。

使用示例:

 ~ » pstree -ap 15897 zsh,15897 └─sudo,9783 make rundev └─make,9784 rundev └─sh,9785 -c cd ajenti-panel && ./ajenti-panel -v --autologin --plugins ../plugins --dev └─python ./ajenti,9786 ├─./ajenti-panel ,9834 ├─./ajenti-panel ,9795 └─{python ./ajenti},9796 ~ » sudo ./memuse.py 15897 PID Commandline Frames (+unique) VMEM - 15897 (/usr/bin/zsh ): 1776 +1776 7104 KB - 9783 (sudo make rundev ): 608 +408 2432 KB - 9784 (make rundev ): 261 +98 1044 KB - 9785 (/bin/sh -c cd ajenti-panel && ): 166 +48 664 KB - 9786 (python ./ajenti-panel -v --aut): 9279 +8977 37116 KB - 9795 (./ajenti-panel worker [restric): 7637 +1334 30548 KB - 9834 (./ajenti-panel worker [session): 8972 +2639 35888 KB ---------------------------------------------------------------------------------------- TOTAL: 15280 61120 KB 

没有明确定义的方式来确定在哪个工具中我知道哪些进程共享哪些映射而不遍历所有的映射和​​比较地址。

但是,linux确实提供了称为比例集合大小的合理估计。 这在/ proc / [pid]> / maps中报告。

该值是映射的大小除以具有相同映射的兄弟/父进程的数量。

因此,通过一个1MiB映射打开的程序,再加上一个与其他4个进程共享的1MiB,比例集大小为1MiB +(1Mib / 4)或1.250 MiB。 这种情况下的RSS将是2MiB。

有一个补丁htop浮动周围将使用PSS来计算实际使用的内存的“好估计”。