Вопрос или проблема
Я отлаживал ошибку сегментации и хотел получить дампы памяти. Я заметил, что coredumpctl
показывал только дамп от 2024/10/29, но не от сегодня.
Я обнаружил, что ulimit -c
был настроен на 0
по какой-то причине (ранее это работало), но сегодня нет. Поэтому я изменил значение. Теперь приложение, по крайней мере, сообщило, что дамп был создан (чего раньше не было). Я узнал через cat /proc/sys/kernel/core_pattern
, что он установлен на core
, так что файл дампа находится в той же папке. Я нашел эту команду echo "/tmp/core_dumps/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern
, которая позволила мне (после создания папки core_dumps
) собирать дампы в одном месте. Кажется, теоретически команда echo "|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" | sudo tee /proc/sys/kernel/core_pattern
должна быть даже полезнее, так как, похоже, она снова позволяет использовать coredumpctl
. Но она по-прежнему показывала только старый дамп.
Кажется, что команда systemctl status systemd-coredump
должна работать для получения статуса вещи, управляющей записью (и передачей в coredumpctl
). Но я получаю только эту ошибку:
Unit systemd-coredump.service could not be found.
systemd-coredump
установлен, но его не удается найти (например, через where systemd-coredump
).
Так как я могу настроить свою систему, чтобы она предоставляла мне дампы памяти (через coredumpctl
)?
Ответ или решение
Для решения проблемы с получением дампов памяти с помощью утилиты coredumpctl
, необходимо разобраться в нескольких аспектах конфигурации вашей системы. Ниже представлены шаги, которые позволят вам правильно настроить окружение для работы с дампами.
1. Проверка настройки ulimit
Первое, что вам нужно сделать, это убедиться, что лимит на создание дампов памяти не равен нулю. Команда ulimit -c
должна вернуть положительное значение, чтобы ядро системы могло создавать дампы. Измените лимит, выполнив:
ulimit -c unlimited
Эта команда позволит вашему приложению создавать дампы памяти без ограничений.
2. Настройка core_pattern
Вы правильно установили core_pattern
, чтобы специфицировать место для сохранения дампов. Убедитесь, что вы выполнили команду, подсмотренную вами:
echo "/tmp/core_dumps/core.%e.%p" | sudo tee /proc/sys/kernel/core_pattern
Также стоит убедиться, что указанная директория (/tmp/core_dumps
) существует и имеет нужные разрешения для записи:
mkdir -p /tmp/core_dumps
chmod 1777 /tmp/core_dumps
3. Установка systemd-coredump
Если вы видите сообщение о том, что systemd-coredump.service
не найден, это может указывать на то, что ваша система не настроена для использования управления дампами через systemd
. Убедитесь в наличии пакета, выполнив:
dpkg -l | grep systemd-coredump
Если пакет не установлен, вы можете установить его через ваш менеджер пакетов (например, apt
для Debian/Ubuntu):
sudo apt install systemd
4. Включение systemd-coredump
Возможно, вам потребуется перезапустить systemd
для применения изменений:
sudo systemctl daemon-reload
Если после этого вы всё ещё не видите нужные дампы через coredumpctl
, попробуйте следующую команду для активации systemd-coredump
:
echo "|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %e" | sudo tee /proc/sys/kernel/core_pattern
После этого проверьте статус сервиса:
systemctl status systemd-coredump
5. Генерация дампа
Теперь, когда всё настроено, вам нужно протестировать, генерируя дамп. Запустите приложение, которое вызывает «сегментацию», чтобы убедиться, что дамп создаётся правильно. После этого выполните команду:
coredumpctl list
6. Итоговая проверка
Если всё сделано правильно, вы должны видеть новые дампы в списке. В противном случае, вы можете использовать journalctl
для просмотра логов ошибок, связанных с systemd-coredump
, что может указать на возможные проблемы.
Заключение
Следуя указанным шагам, вы сможете правильно настроить вашу систему для получения дампов памяти с использованием coredumpctl
. Если у вас возникнут дополнительные проблемы, имеет смысл обратиться к документации вашей системы или сообществам, связанным с Linux и системным администрированием, для получения более специализированной помощи.