Больше никаких дампов памяти после миграции на systemd [дубликат]

Вопрос или проблема

Генерация дампов памяти раньше работала нормально, но после перехода на systemd я вижу только сообщение

Прервано (дамп памяти)

но файл core не создается. Это связано с systemd?

(Контекст: Мой оригинальный вопрос можно найти здесь. Спасибо schaiba за нахождение решения. Я предоставляю этот вопрос и ответ, чтобы другие могли легче найти решение, если они уже знают, что это проблема systemd.)

По умолчанию, systemd записывает дампы памяти в журнал. coredumpctl list показывает отсутствующие дампы памяти.

Файлы хранятся в /var/lib/systemd/coredump. Используйте coredumpctl dump, чтобы получить доступ к файлам ядра.

Например, если PID был 10666, вы можете использовать

coredumpctl dump 10666 --output /tmp/core.10666

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

# ulimit -c unlimited

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

Настройки ядра /proc/sys/ управляются с помощью sysctl(8), системные настройки находятся в /usr/lib/sysctl.d/, переопределены в /etc/sysctl.conf или /etc/sysctl.d/. Они определяют имя файлов core и тому подобное. Не их запись (если только ядро не настроено на разрешение дампов памяти от SUID бинарников). Запись контролируется с помощью ulimit(1), т.е. ulimit -c unlimited не накладывает ограничений. Под systemd(1) файлы ядра, созданные под его контролем, записываются в журнал, могут быть извлечены с помощью coredumpctl(1). Обычные пользовательские процессы остаются без изменений.

systemd‘s systemd-sysctl.service просто запускает sysctl в нужный момент загрузки и обрабатывает повторный запуск при изменениях.

Ответ или решение

Проблема отсутствия файлов дампов ядра после перехода на systemd

При переходе на systemd пользователи могут столкнуться с ситуацией, когда после аварийного завершения работы приложения не создаются файлы дампов ядра (core dumps). Вместо этого отображается сообщение: Aborted (core dumped). В этом ответе мы рассмотрим причины этой проблемы и возможные решения.

Причины отсутствия дампов ядра

По умолчанию, systemd изменяет способ обработки дампов ядра, что может вызвать путаницу для пользователей, привычных к традиционным методам сохранения дампов.

  1. Журналирования дампов: Systemd по умолчанию записывает дампы ядра в журнал. Вместо создания файлов в рабочем каталоге приложения, попробуйте использовать команду coredumpctl. Эта команда позволяет просмотреть и извлечь дампы, сохранив их в формате файлов:

    coredumpctl list

    Чтобы получить доступ к конкретному дампу по PID, используйте следующую команду:

    coredumpctl dump <PID> --output /tmp/core.<PID>

    Например, для процесса с идентификатором 10666 команда будет выглядеть так:

    coredumpctl dump 10666 --output /tmp/core.10666
  2. Ограничения на дампы: Следует убедиться, что ограничения на создание дампов ядра не установлены. Используйте команду ulimit, чтобы проверить это:

    ulimit -c

    Для снятия любых ограничений выполните:

    ulimit -c unlimited
  3. Параметры ядра: Конфигурации, связанные с заполнением дампов, могут быть настроены через sysctl. Проверьте файлы конфигурации, расположенные в каталогах /usr/lib/sysctl.d/, /etc/sysctl.conf, или /etc/sysctl.d/, чтобы убедиться, что параметры, определяющие имена файлов и другие аспекты, настроены корректно.

  4. Проверка прав доступа: Кроме того, необходимо убедиться в том, что процесс имеет достаточно прав для записи в рабочий каталог, где предполагается создание дампов.

Заключение

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

При переходе на systemd, включение и использование coredumpctl является наиболее простым и эффективным способом работы с дампами, что позволяет упрощенно обрабатывать их и сохранять необходимую информацию для отладки.

Оцените материал
Добавить комментарий

Капча загружается...