1

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

1 回答 1

1

coredump 可以并且确实可以过滤进程内存。请参阅核心手册页

控制将哪些映射写入核心转储

从内核 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 引导选项修改此默认值。

我假设 OS X 的行为类似。

于 2016-06-26T12:27:35.427 回答