我正在调查(意外地)保留数TB VIRT
的进程的内存使用情况。如果我为该过程做pmap
,我会看到一些强大的分配,例如:
00007f39ea671000 317288696K rw--- [ anon ]
我正在strace
下运行我的进程,以跟踪所有与内存相关的syscall并使用其stracktrace。
strace -o ~/strace.out -f -e trace=mremap,mmap,munmap,brk -k <command>
我希望我能够在strace.out
中找到此分配,所以我将其分配为:
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
是否显示映射的放大大小?还是我想念一些系统调用?