Coredump大小与进程虚拟内存空间不同

时间:2016-06-26 12:18:43

标签: macos coredump darwin xnu

我正在使用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

1 个答案:

答案 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表现相似。