我在计算一组进程实际使用的内存(驻留)时遇到了麻烦。
刚刚出现的问题是具有一组进程的用户在自己之间共享内存,所以简单地添加已用内存最后会有一个无意义的数字(当机器只有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] 举报,一经查实,本站将立刻删除。