Дампы ядра Linux являются слишком большими!

Недавно я замечал увеличение размера дампов ядра, сгенерированных моим приложением. Первоначально, они были чуть приблизительно 5 МБ в размере и содержали приблизительно 5 стековых фреймов, и теперь у меня есть дампы ядра>, 2 ГБ и информация, содержавшая в них, не отличаются от меньших дампов.

Есть ли какой-либо способ, которым я могу управлять размером сгенерированных дампов ядра? Разве они не должны быть, по крайней мере, меньшими, чем сам двоичный файл приложения?

Двоичные файлы компилируются таким образом:

  • Скомпилированный в режиме выпуска с отладочными символами (т.е.,-g параметр компилятора в GCC).
  • Отладочные символы копируются на a
    отдельный файл и разделенный от
    двоичный файл.
  • Ссылка отладочных символов GNU добавляется к двоичному файлу.

В начале приложения существует вызов к setrlimit который устанавливает базовый предел к бесконечности - действительно ли это - проблема?

8
задан ire_and_curses 4 May 2010 в 04:59
поделиться

2 ответа

Да - не выделяйте так много памяти: -)

Дамп ядра содержит полный образ адресного пространства вашего приложения, включая код, стек и кучу (объекты с ограничением памяти и т. Д.)

Если размер дампа ядра> 2 ГБ, это означает, что в какой-то момент вы выделили столько памяти .

Вы можете использовать setrlimit, чтобы установить нижний предел размера дампа ядра, рискуя получить дамп ядра, который вы не сможете декодировать (потому что он неполный).

11
ответ дан 5 December 2019 в 14:01
поделиться

Да, благодаря setrlimit вы получаете большие файлы ядра. Вы можете установить ограничение на размер ядра в большинстве оболочек, например в bash вы можете сделать ulimit -c 5000000 . Однако ваш вызов setrlimit переопределит это.

/etc/security/limits.conf также можно использовать для установки верхних границ размера ядра.

1
ответ дан 5 December 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: