我正在调查一个进程的内存使用情况,该进程(意外地)保留了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
显示了夸大的映射大小?还是我错过了一些系统调用?