TGViewer
DevOps Ready | IT DevOps Ready | IT @devops_ready · 7.63K subscribers
Post #1060 1.34K
Настройка coredump в Linux — диагностика падений процессов!

Когда Linux-процесс аварийно завершается (например, SIGSEGV / Segmentation fault, SIGABRT и др.), система может сохранить снимок памяти процесса — core dump.

Без dump-файла обычно остаётся только сам факт падения и запись в логах. Core dump позволяет открыть состояние процесса в gdb, получить stack trace, посмотреть память, регистры, потоки и локализовать причину уже после завершения процесса.

Проверка текущего лимита на создание dump:
ulimit -c


Если вывод 0 — сохранение core dump отключено для текущей shell/session.

Временное включение:
ulimit -c unlimited


Это работает только для процессов, запущенных из текущей shell-сессии. После logout или reboot настройка пропадёт.

Для systemd-сервисов одного ulimit недостаточно — лимит нужно задавать в unit-файле:
[Service]
LimitCORE=infinity


После изменения unit-файла:
sudo systemctl daemon-reload
sudo systemctl restart app.service


Теперь проверяем, как именно система сохраняет dump-файлы:
cat /proc/sys/kernel/core_pattern


Параметр core_pattern определяет обработчик и путь сохранения dump. Если значение начинается с |, dump передаётся внешнему обработчику, например systemd-coredump.

Пример прямого сохранения dump в файл:
/core.%e.%p.%t


Где: %e — имя процесса; %p — PID процесса; %t — UNIX timestamp

Создадим каталог для dump-файлов и настроим сохранение:
sudo mkdir -p /var/crash
sudo chmod 1777 /var/crash
sudo sysctl -w kernel.core_pattern=/var/crash/core.%e.%p.%t


1777 используется как простой демо вариант для тестов и локальной диагностики. В продакшен обычно делают более жёсткие права доступа и отдельно контролируют доступ к dump-файлам, поскольку они могут содержать чувствительные данные процесса.

Чтобы настройка сохранилась после reboot:
sudo nano /etc/sysctl.d/99-coredump.conf


Добавляем:
kernel.core_pattern=/var/crash/core.%e.%p.%t


Применяем конфигурацию:
sudo sysctl --system


Пример аварийного завершения процесса:
./app
Segmentation fault (core dumped)


После падения появится dump-файл:
/var/crash/core.app.18422.1715962012


Теперь можно открыть dump через gdb:
gdb ./app /var/crash/core.app.18422.1715962012


Посмотреть стек вызовов:
(gdb) bt


Для полноценного анализа бинарь желательно собирать с debug symbols (-g) без stripping.

На большинстве современных systemd-дистрибутивов dump часто обрабатывается через systemd-coredump, а не сохраняется напрямую через core_pattern.

Посмотреть список crash:
coredumpctl list


Получить информацию по dump:
coredumpctl info PID


Открыть dump сразу в gdb:
coredumpctl debug PID


Вместо PID можно использовать имя процесса, путь к бинарю и другие фильтры coredumpctl. Также важно помнить, что systemd-coredump отдельно управляет хранением dump-файлов через coredump.conf: Storage, ProcessSizeMax, ExternalSizeMax, MaxUse, KeepFree.

Это особенно важно в проде, где dump может занимать гигабайты и быстро заполнять диск.

🔥 Core dump — один из базовых механизмов low-level диагностики Linux-приложений, backend-сервисов и анализа падений в продакшен.

🚪 Linux Ready | #практика
  • ❤ 11
  • 👍 6
  • 🔥 5
More from @devops_ready
  1. Oct 2, 2026Знали, почему настройки systemd-сервиса лучше менять через systemctl edit? Допустим, прило…
  2. Oct 2, 2026⚡️5 фундаментальных курсов по ИБ по цене одного Это предложение для тех, кто готов войти в…
  3. Oct 2, 2026Этот инструмент поможет поять из чего на самом деле состоит Docker-образ! Он содержит терм…
  4. Oct 1, 2026Проверяем итоговую конфигурацию Docker Compose перед запуском! Когда проект использует баз…
  5. Oct 1, 2026🔄 Безопасный арсенал практических инструкций, курсов и инструментов 👩‍💻 Linux & Bash 🤔…
  6. Oct 1, 2026Шпаргалка по жизненному циклу Pod в Kubernetes! На картинке показано, как запрос проходит…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →