首页 > 解决方案 > 为什么 pmap 显示 strace 没有的映射?

问题描述

我正在调查一个进程的内存使用情况,该进程(意外地)保留了VIRT. 如果我pmap为那个过程做,我可以看到一些强大的分配,例如:

00007f39ea671000 317288696K rw---   [ anon ]

我正在strace跟踪所有与内存相关的系统调用并打印它们的 stracktraces 来运行我的进程。

strace -o ~/strace.out -f -e trace=mremap,mmap,munmap,brk -k <command>

我希望我能够在 中找到这个分配strace.out,所以我 grep :

cat strace.out | grep -A10 7f39ea671000

我只看到这个调用mmap

106224 mmap(NULL, 201543680, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7f39ea671000
 > /usr/lib/x86_64-linux-gnu/libc-2.29.so(mmap64+0x22) [0xf5252]
 > /usr/lib/x86_64-linux-gnu/libc-2.29.so(_IO_str_seekoff+0x2ff4) [0x84ab4]
 > /usr/lib/x86_64-linux-gnu/libc-2.29.so(_IO_str_seekoff+0x3e0b) [0x858cb]
 > /usr/lib/x86_64-linux-gnu/libc-2.29.so(__libc_malloc+0x22f) [0x869ff]
...

这里发生了什么?是否pmap显示了夸大的映射大小?还是我错过了一些系统调用?

标签: linuxmmapvirtual-memorystracepmap

解决方案


推荐阅读