Недавно я замечал увеличение размера дампов ядра, сгенерированных моим приложением. Первоначально, они были чуть приблизительно 5 МБ в размере и содержали приблизительно 5 стековых фреймов, и теперь у меня есть дампы ядра>, 2 ГБ и информация, содержавшая в них, не отличаются от меньших дампов.
Есть ли какой-либо способ, которым я могу управлять размером сгенерированных дампов ядра? Разве они не должны быть, по крайней мере, меньшими, чем сам двоичный файл приложения?
Двоичные файлы компилируются таким образом:
В начале приложения существует вызов к setrlimit
который устанавливает базовый предел к бесконечности - действительно ли это - проблема?
Да - не выделяйте так много памяти: -)
Дамп ядра содержит полный образ адресного пространства вашего приложения, включая код, стек и кучу (объекты с ограничением памяти и т. Д.)
Если размер дампа ядра> 2 ГБ, это означает, что в какой-то момент вы выделили столько памяти .
Вы можете использовать setrlimit, чтобы установить нижний предел размера дампа ядра, рискуя получить дамп ядра, который вы не сможете декодировать (потому что он неполный).
Да, благодаря setrlimit вы получаете большие файлы ядра. Вы можете установить ограничение на размер ядра в большинстве оболочек, например в bash вы можете сделать ulimit -c 5000000
. Однако ваш вызов setrlimit переопределит это.
/etc/security/limits.conf также можно использовать для установки верхних границ размера ядра.