我正在使用OS X 10.11,并以下列方式生成转储文件:
1. ulimit -c unlimited
2. kill -10 5228 (process pid)
并获得具有滚动属性的转储文件:642M Jun 26 15:00 core.5228
在此之前,我使用vmmap
命令检查进程总内存空间,以尝试估计预期的转储大小。
然而,估计(238.7Mb)远小于实际尺寸(642Mb)。
可以解释这个差距吗?
VIRTUAL REGION
REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
Activity Tracing 2048K 2
Kernel Alloc Once 4K 2
MALLOC guard page 16K 4
MALLOC metadata 180K 6
MALLOC_SMALL 56.0M 4 see MALLOC ZONE table below
MALLOC_SMALL (empty) 8192K 2 see MALLOC ZONE table below
MALLOC_TINY 8192K 3 see MALLOC ZONE table below
STACK GUARD 56.0M 2
Stack 8192K 2
__DATA 1512K 44
__LINKEDIT 90.9M 4
__TEXT 8336K 44
shared memory 12K 4
=========== ======= =======
TOTAL 238.7M 110
VIRTUAL ALLOCATION BYTES REGION
MALLOC ZONE SIZE COUNT ALLOCATED % FULL COUNT
=========== ======= ========= ========= ====== ======
DefaultMallocZone_0x100e42000 72.0M 7096 427K 0% 6
答案 0 :(得分:1)
coredump可以并且确实会过滤进程内存。请参阅core man page:
控制将哪些映射写入核心转储
从内核2.6.23开始,特定于Linux的/ proc / PID / coredump_filter文件可用于控制在针对具有相应进程的进程执行核心转储的情况下将哪些内存段写入核心转储文件进程ID。
文件中的值是内存映射类型的位掩码(请参阅mmap(2))。如果掩码中设置了一个位,则转储相应类型的内存映射;否则他们不会倾倒。此文件中的位具有以下含义:
bit 0 Dump anonymous private mappings. bit 1 Dump anonymous shared mappings. bit 2 Dump file-backed private mappings. bit 3 Dump file-backed shared mappings. bit 4 (since Linux 2.6.24) Dump ELF headers. bit 5 (since Linux 2.6.28) Dump private huge pages. bit 6 (since Linux 2.6.28) Dump shared huge pages. bit 7 (since Linux 4.4) Dump private DAX pages. bit 8 (since Linux 4.4) Dump shared DAX pages.
默认情况下,设置以下位:0,1,4(如果启用了
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS
内核配置选项),以及5.可以使用coredump_filter引导选项在引导时修改此默认值。 / p>
我认为OS X表现相似。