2016-06-26 2 views
1

Я работаю над OS X 10.11, и сгенерированный файл дампа следующим образом:CoreDump размер отличается от пространства виртуальной памяти процесса

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

coredump может и не фильтровать память процесса. Смотрите core man page:

Контроллинг, которые отображения записываются в сердцевине дамп

Начиная с ядра 2.6.23, то/файл/coredump_filter PID Linux-специфические/прок может быть использован для управления сегментами, которые памяти записываются в файл дампа ядра в том случае, если для процесса выполняется соответствующий дамп с соответствующим идентификатором процесса.

Значение в файле представляет собой битовую маску типов отображения памяти (см. 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 ведет себя аналогичным образом.

+0

Благодарим за тщательный отклик, но какие-либо дополнительные данные, представленные битами 0-8, добавляют память, которая не учитывается в виртуальной карте памяти процесса, полученной в поле 'VmSize' в'/proc/self/status'? – Zohar81

Смежные вопросы