【发布时间】:2009-11-22 10:32:58
【问题描述】:
我需要找出一个进程分配了多少内存页? 每页是 4096,进程内存使用情况我在定位正确值时遇到了一些问题。当我查看 gome-system-monitor 时,在内存映射下有几个值可供选择。
谢谢。
这里的重点是将内存使用量除以页数并验证页大小。
【问题讨论】:
我需要找出一个进程分配了多少内存页? 每页是 4096,进程内存使用情况我在定位正确值时遇到了一些问题。当我查看 gome-system-monitor 时,在内存映射下有几个值可供选择。
谢谢。
这里的重点是将内存使用量除以页数并验证页大小。
【问题讨论】:
很难计算出正确分配的确切内存量:与其他进程共享的页面(库的 r/o 部分),从未使用过由brk 和匿名mmap 分配的内存,未获取的 mmaped 文件由于高效的处理算法只触及文件的一小部分等,换出页面,脏页要写入磁盘等,因此完全从磁盘中删除。
如果您想处理所有这些复杂性并计算出真正的页数,可以在/proc/<pid>/smaps 获得详细信息,并且有一些工具,如mem_usage.py 或smem.pl(很容易用谷歌搜索)来打开它成或多或少有用的摘要。
【讨论】:
这将是“驻留集大小”,假设您的进程不使用交换。
请注意,一个进程可能会分配更多的内存(“虚拟内存大小”),但只要它不写入内存,它就不会由物理内存表示,无论是在 RAM 中还是在磁盘上。
一些系统工具,如 top,为每个进程显示一个巨大的“交换”值——这当然是完全错误的,该值是 VMS 和 RSS 之间的差异,很可能是那些未使用但已分配的内存页面。
【讨论】: