首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解pmap输出

了解pmap输出
EN

Stack Overflow用户
提问于 2012-03-23 03:02:50
回答 2查看 35.2K关注 0票数 21

我试图使用pmap -x命令查看Linuxx86-64上某个进程的内存映射。我对pmap的输出感到困惑。尤其是用于映射动态库的条目。它们有多个条目(实际上大多数条目都有4个条目,有些条目有3个条目)。下面是一个例子

代码语言:javascript
复制
  Address           Kbytes   RSS   Dirty Mode   Mapping

00000036ca200000      88      64       0 r-x--  libpthread-2.5.so
00000036ca216000    2044       0       0 -----  libpthread-2.5.so
00000036ca415000       4       4       4 r----  libpthread-2.5.so
00000036ca416000       4       4       4 rw---  libpthread-2.5.so

当没有页面权限时,每个库的第二行的大小始终为2MB。在所有的库中,它的RSS似乎总是为零。最后两行也具有相同的大小(这是基本页面大小)和相同的权限(少数库没有rw映射)。

有人对此有什么解释吗?我有一种感觉,可能只读保护的映射是由加载器完成的,以读取库的元数据,而具有可执行权限的部分实际上是库的代码。不过,我可能错了。

但我对中间那排毫无头绪。没有权限,没有使用?这里有谁有一些智慧的话吗?

我还看到一些页面被报告在匿名内存上,并且没有设置任何模式位。这些代表了什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-23 13:00:40

首先,可能存在这样的情况,即一个相同的进程可以使用多个内存使用实例。我不知道这是不是你想知道的。我已经看到,在Linux中使用浏览器时,只打开一个选项卡,并使用top命令,它在内存使用列表中显示了4种以上的使用情况,覆盖了超过10mb的内存。我认为这是可以的,因为由同一进程运行的线程数量更多。

这个链接可能很有用,因为在用法示例本身中,如果您观察到,-x命令的映射显示了更多的用法。

http://www.cyberciti.biz/tips/howto-find-memory-used-by-program.html

票数 4
EN

Stack Overflow用户

发布于 2015-10-23 20:01:48

这些受保护的“-”页是保护页,以防止指针在库的代码段和数据段之间建立索引。它们只存在于进程的虚拟空间中,存在的目的是为了在指针经过段的末尾时导致错误。

如果这些没有放到一个共享库文件中,我会说它们是一个缓冲区,用于将分配扩展到例如malloc或栈增长。例如,glibc从内核请求大量的地址空间用于线程本地分配区域,然后缓慢地消耗它们用于malloc的分配。在我所看到的来自JVM的更大的pmap中,有几十个这样的页面,每个页面都跟随一个RW页面,或者填充两个大的RW分配之间的空间,并且它们之间的边界随着RW页面的扩展而移动。在X86_64上,像这样的保护页可以使用CPU的内存保护系统来捕获错误的指针引用。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9828810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档