Поиск по сайту:

Как включить дамп ядра в Linux


В этом руководстве объясняется, как включить дамп ядра в Linux.

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

Файлы дампа ядра используются для диагностики и устранения сбоев программного обеспечения.

Дамп ядра — это неструктурированный реестр содержимого памяти, содержащий информацию о аварийном прекращении выполнения программного обеспечения, включая причину сбоя.

Другими словами, это снимок состояния программы с записью процесса выполнения и завершения. Вы можете думать о дампе ядра как о черном ящике самолета или файле журнала.

Управление дампом ядра может варьироваться от дистрибутива Linux к другому, это руководство оптимизировано как для дистрибутивов Linux на основе Debian, таких как Ubuntu, так и для дистрибутивов RedHat Linux, таких как CentOS.

Все инструкции, включенные в эту статью, содержат скриншоты, что облегчает их понимание и выполнение каждым пользователем Linux.

Включение дампа ядра в Linux

Первый шаг — проверить, включен ли дамп ядра. Для этого используйте следующую команду. Если размер файла ядра равен 0, как в приведенном ниже примере, дамп ядра отключен.

ulimit -a | grep core

Чтобы включить дамп ядра в Linux с неограниченным размером, используйте следующую команду. Затем выполните предыдущую команду, и вы увидите, что 0 заменен на неограниченное количество.

ulimit -S -c unlimited

Чтобы постоянно включать дамп ядра, вам нужно отредактировать файл /etc/security/limits.conf. Откройте его с привилегиями, используя любой текстовый редактор.

sudo nano /etc/security/limits.conf

Затем добавьте следующую строку и закройте сохранение изменений:

* soft core unlimited

Теперь давайте попробуем запустить приложение, запрограммированное на преднамеренный сбой.

Как вы можете видеть на скриншоте ниже, дамп ядра был сгенерирован.

В соответствии с конфигурацией по умолчанию в дистрибутивах Linux на базе Debian дамп ядра должен создаваться в текущем каталоге. Вы можете проверить это, выполнив следующую команду:

ls -ltr core

Как вы можете видеть на предыдущем рисунке, дамп ядра был сгенерирован правильно.

Для его просмотра необходимо установить отладчик GNU. Вы можете установить его с помощью apt, как показано на изображении ниже.

Обратите внимание, что пользователи систем на основе RedHat должны использовать инструмент автоматического сообщения об ошибках (ABRT) вместо GDB.

sudo apt install gdb -y

Для просмотра файлов дампа ядра используйте следующий синтаксис:

gdb <CrashingProgram> core

В моем случае я запускаю:

gdb crashingapp core

Вам будет предложено нажать «c», чтобы продолжить. Нажмите ее, и вы увидите отчет.

По умолчанию файлы дампа ядра называются core.

sudo sysctl -w kernel.core_pattern=core

Вы можете изменить имя и шаблоны назначения, чтобы легко идентифицировать дампы ядра.

Команда следующая:

-%u будет включать идентификатор пользователя в имя дампа ядра. -%g будет включать идентификатор группы и %p PID.

sudo sysctl -w kernel.core_pattern=core-%u-%g-%p

Как видите, после повторного запуска аварийного приложения создается новый дамп ядра, включая UID, GID и PID.

ls -ltr core*

Существуют дополнительные значения, которые можно использовать для определения шаблонов дампа памяти. Вы можете найти их в списке ниже.

%%

вывести один «%»

%p

Включает PID

%P

Включает глобальный PID

%i

Показывает идентификатор потока

%I

Глобальный идентификатор потока

%u

ID пользователя

%g

Идентификатор группы

%d

Режим дампа

%s

Номер сигнала

%t

UNIX время дампа

%h

Имя хоста

%e

Запускаемый файл

%E

Путь к исполняемому файлу

Вы также можете определить каталог дампов ядра для их хранения.

Синтаксис следующий:

«/cored» — это каталог, в котором будут храниться дампы ядра. Эти имена будут включать как PID, так и Global PID.

sudo sysctl -w kernel.core_pattern=/cored/core-%p-%P

Как видите, после запуска аварийного приложения дамп ядра был сохранен в каталоге /cored, включая PID и GPID.

ls -ltr /cored

Как отключить дампы ядра в Linux

Отключить дамп ядра так же просто, как включить их.

Просто установите ограничение на 0, выполнив следующую команду:

ulimit -S -c 0

Чтобы навсегда отключить дамп ядра, отредактируйте файл /etc/security/limits.conf с помощью любого текстового редактора, как показано на рисунке ниже.

sudo nano /etc/security/limits.conf

Добавьте следующие 2 строки, затем выйдите из режима сохранения изменений.

* soft core 0
* hard core 0

Наконец, проверьте, был ли дамп ядра успешно отключен, выполнив следующее:

ulimit -a | grep core

Как видите, предельный размер файла ядра равен 0, дамп ядра отключен.

Заключение

Дампы ядра могут быть очень полезны для процедур отладки и выявления сбоев. Рекомендуется ознакомиться с ними, чтобы улучшить реакцию на проблемы. Они также могут быть полезны для захвата данных, освобожденных динамической памятью, для извлечения информации о более не работающих программах. Они также могут быть полезны программистам для поиска ошибок. Дамп ядра может сохранить состояние процесса в определенном состоянии, чтобы вернуться к нему позже. Его также можно сбросить на удаленный хост по сети (что представляет угрозу безопасности).

Статьи по данной тематике: