通过Linux上的一组进程计算已用内存

时间:2013-08-07 13:22:49

标签: c++ c linux memory posix

我在通过一组进程计算实际使用的内存(驻留)时遇到了麻烦。

刚出现的问题是具有一组共享内存的进程的用户,因此使用内存的简单添加最终会产生无意义的数字(当机器只有48GB的内存时,> 60gb)。 / p>

有没有简单的方法来解决这个问题?

我可以做一些近似。拿(res mem - shared mem) * num proc + shared mem。但并非所有进程都必须共享相同的内存块。

我正在寻找针对C / C ++的这个问题的POSIX或Linux解决方案。

1 个答案:

答案 0 :(得分:3)

您需要遍历每个流程/proc/[pid]/smaps

它将包含喜欢的每个VM映射的条目:

7ffffffe7000-7ffffffff000 rw-p 00000000 00:00 0                          [stack]
Size:                100 kB
Rss:                  20 kB
Pss:                  20 kB
Shared_Clean:          0 kB
Shared_Dirty:          0 kB
Private_Clean:         0 kB
Private_Dirty:        20 kB
Referenced:           20 kB
Anonymous:            20 kB
AnonHugePages:         0 kB
Swap:                  0 kB
KernelPageSize:        4 kB
MMUPageSize:           4 kB

Private_Dirty记忆是你感兴趣的。

如果Pss文件中有smaps字段,则这是驻留内存量除以共享物理内存的进程数量。

Private_Clean可以是写时复制映射。它们通常用于共享库,通常是读/不写/执行。