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