微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

刚刚出现的问题是具有一组进程的用户在自己之间共享内存,所以简单地添加已用内存最后会有一个无意义的数字(当机器只有48GB内存时> 60gb)。

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

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

几乎连续的v / s物理上连续的

我的蹦床不会反弹(绕路,C ++,GCC)

虚拟内存分配没有物理内存分配

有关Linux内存types的问题

Linux中文件描述符的理论极限

我在找C / C ++的这个问题的POSIX或Linux解决scheme。

监视你自己进程中的内存使用情况

mmap和内存使用情况

不能在64位Linux系统上用mmap / malloc / open等创build大于2GB的文件

将限制设置为Linux中可用的总物理内存

由于64位进程的内存分配过多,Windows会冻结

你将要遍历每个进程/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 coreelPageSize: 4 kB MMUPageSize: 4 kB

Private_Dirty内存是你感兴趣的。

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐