Подтвердить что ты не робот

Селективный базовый дамп в Linux - Как я могу выбрать сбрасываемые разделы?

Я ищу способ выбора разделов и областей памяти, включенных в дамп ядра.
Размер дампа моего приложения составляет около 30 ГБ, большая часть его находится в предварительно распределенных буферах, которые мне даже не нужны при отладке (и их можно обнулить позже). Однако, поскольку дамп настолько велик, для приложения требуется слишком много времени, чтобы завершить сбой и начать восстановление.
Может ли кто-нибудь подумать о том, как выбрать заранее, какие сегменты будут находиться в основной дампе?
Благодаря

4b9b3361

Ответ 1

В соответствии с core(5) manpage вы можете установить, какие сопоставления записываются в основной файл:

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

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

По умолчанию установлены следующие биты: 0, 1, 4 (если CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS параметр конфигурации ядра включен) и 5. Значение этого файла отображается в шестнадцатеричном формате. (The значение по умолчанию отображается как 33.) Страницы ввода-вывода с отображением памяти, такие как буфер кадров, никогда не сбрасываются, и виртуальные страницы DSO всегда сбрасываются, независимо от coredump_filter значение.

...

Этот файл предоставляется только в том случае, если ядро ​​было создано с помощью Конфигурация конфигурации CONFIG_ELF_CORE.

Ответ 2

Я не уверен, возможно ли установить, какую часть памяти выгружать.

От man 5 core

файл диска, содержащий изображение памяти процесса во время завершения

В качестве опции вы можете обрезать файл ядра с помощью setrlimit с параметром RLIMIT_CORE.