Служба упала, а дамп памяти не собран
Дамп памяти — единственный способ разобрать падение, которое не объясняется журналом. Его отсутствие имеет три типовые причины, и все три проверяются за минуту. Отдельно стоит помнить, что дампы содержат память процесса: пароли и данные пользователей попадают в них целиком.
Вероятные причины
По порядку: сверху то, что встречается чаще.
-
Обработчик дампов не назначен
Дамп передаётся программе, указанной в настройке ядра. Если это не сборщик systemd, дампы в его хранилище не появятся.
-
Размер дампа ограничен
Предел размера дампа для процесса может быть нулевым. Тогда дамп не создаётся вовсе.
-
Дамп удалён по сроку или размеру хранилища
Хранилище дампов ограничено по объёму и сроку. Крупные дампы вытесняются быстро.
Диагностика
Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.
Собранные дампы: время, unit, сигнал.
coredumpctl list --no-pager | tail -10Кто назначен обработчиком дампов.
sysctl kernel.core_patternПредел размера дампа для службы.
systemctl show myapp.service -p LimitCOREРешение
Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.
- Почему происходит
- Дамп передаётся программе, указанной в настройке ядра. Если это не сборщик systemd, дампы в его хранилище не появятся.
- Как проверить
-
Посмотрите обработчик и содержимое хранилища.
sysctl kernel.core_pattern coredumpctl list --no-pager 2>&1 | tail -5
- Как исправить
- Назначьте обработчиком сборщик systemd: тогда дампы попадут в его хранилище с привязкой к unit и будут доступны штатной команде.
- Почему происходит
- Предел размера дампа для процесса может быть нулевым. Тогда дамп не создаётся вовсе.
- Как проверить
-
Посмотрите предел у службы и системное значение.
systemctl show myapp.service -p LimitCORE systemd-analyze cat-config systemd/coredump.conf | grep -iE "ProcessSizeMax|ExternalSizeMax"
- Как исправить
-
Снимите предел размера дампа для нужной службы и проверьте пределы сборщика: они отдельные и тоже режут крупные дампы.
[Service] LimitCORE=infinity
- Почему происходит
- Хранилище дампов ограничено по объёму и сроку. Крупные дампы вытесняются быстро.
- Как проверить
-
Посмотрите хранилище и настройки.
sudo du -sh /var/lib/systemd/coredump 2>/dev/null systemd-analyze cat-config systemd/coredump.conf | grep -iE "MaxUse|KeepFree"
- Как исправить
- Разбирайте падения сразу или увеличьте хранилище. Держать дампы долго не стоит: в них лежат данные из памяти процесса.
Пример вывода
Обработчик дампов не назначен сборщику systemd. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.
systemd[1]: myapp.service: Main process exited, code=dumped, status=11/SEGV
$ coredumpctl list
No coredumps found.
$ sysctl kernel.core_pattern
kernel.core_pattern = core
Связанные ошибки
- Failed with result 'core-dump' Состояние core-dump: процесс службы аварийно завершился и сохранил дамп памяти. Как открыть дамп и прочитать трассировку.
- signal=SEGV (status=11/SEGV) в systemd Процесс службы завершён сигналом SEGV: обращение к недопустимой памяти. Как собрать дамп и что смотреть.
- segfault at ... in журнале: процесс службы упал по нарушению доступа Ядро записало нарушение доступа к памяти. Как прочитать строку, собрать дамп и отделить дефект программы от неисправной памяти.
- Failed to start … — что делать с общим сообщением Строка Failed to start сообщает только факт. Порядок разбора: найти настоящую причину выше по журналу.
- Invalid argument в журнале службы Ошибка 22: недопустимый аргумент системного вызова. Как сузить поиск, когда сообщение ничего не уточняет.
- Job for myapp.service failed: с чего начинать разбор Сообщение systemctl при неудачном запуске: что в нём есть, чего в нём нет и какие три команды дают ответ.
- Tainted в сообщениях ядра: что это значит при разборе сбоя Метка Tainted рядом с сообщением ядра: откуда берётся, на что влияет и почему её стоит учитывать.
- В журнале нет сообщений об ошибке, хотя служба падает Ошибки не видны: уровень подробности обрезан параметрами unit-файла или настройками журнала.
Источники
-
coredump.conf(5)
Настройки сборщика дампов и пределы размеров. -
coredumpctl(1)
Просмотр и извлечение собранных дампов. -
Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
Проверено на systemd 255: при чужом обработчике дампы в хранилище сборщика не появляются.