Минидампы (встроенный Google Breakpad)
Узлы ydbd в YDB могут собирать минидампы при аварийном завершении процесса с помощью встроенного Google Breakpad. Минидамп — это компактный снимок состояния процесса (стек, регистры, список загруженных модулей) в момент падения по необработанному сигналу (SIGSEGV, SIGABRT, SIGFPE и другим).
В отличие от системного core dump, минидамп:
- занимает существенно меньше места;
- собирается собственным обработчиком сигналов и не зависит от настроек
ulimitиcore_patternна хосте; - может автоматически передаваться внешнему скрипту для пост-обработки (загрузки, символизации, оповещения).
Примечание
Сбор минидампов работает только на Linux. На других платформах (например, macOS) ydbd запускается, но встроенный Breakpad в сборку не входит и минидампы не собираются.
Включение сбора минидампов
По умолчанию сбор минидампов выключен. Чтобы включить его, нужно указать директорию, в которую будут записываться дампы. Это можно сделать двумя способами: переменными окружения и опциями командной строки ydbd server. Опции командной строки имеют приоритет над переменными окружения.
Если директория не задана ни одним из способов, встроенный Breakpad не активируется и не устанавливает обработчики сигналов.
Примечание
Указанная директория должна существовать до запуска процесса; YDB не создаёт её автоматически. Если директория отсутствует в момент падения, минидамп не будет записан.
Переменные окружения
| Переменная | Назначение |
|---|---|
BREAKPAD_MINIDUMPS_PATH |
директория для записи минидампов; задание этой переменной включает сбор минидампов при старте процесса |
BREAKPAD_MINIDUMPS_SCRIPT |
путь к скрипту пост-обработки минидампа |
Опции командной строки
Опции добавляются к команде ydbd server:
| Опция | Назначение |
|---|---|
--breakpad-minidumps-path PATH |
директория для записи минидампов |
--breakpad-minidumps-script SCRIPT |
путь к скрипту пост-обработки минидампа |
Пример запуска:
ydbd server \
--breakpad-minidumps-path /var/log/ydb/minidumps \
--breakpad-minidumps-script /usr/local/bin/process-minidump.sh \
...
Скрипт пост-обработки
Если задан скрипт пост-обработки, он запускается сразу после записи минидампа. Скрипт вызывается со следующими аргументами:
| Аргумент | Значение |
|---|---|
$1 |
true или false — был ли минидамп успешно записан |
$2 |
путь к файлу минидампа (пустая строка, если запись не удалась) |
Скрипту не передаётся окружение процесса ydbd, поэтому все необходимые ему параметры должны быть зашиты в самом скрипте или вычисляться из аргументов.
Важно
Скрипт запускается из обработчика сигнала упавшего процесса через fork/exec. Обработчик сигнала блокируется до завершения скрипта, поэтому скрипт должен завершаться быстро. Тяжёлую обработку (загрузку дампа, символизацию, оповещения) следует выносить в фоновые процессы, которые скрипт запускает перед выходом.
Пример скрипта, который только перемещает дамп в архивную директорию:
#!/bin/sh
# $1 — succeeded (true|false), $2 — путь к минидампу
if [ "$1" = "true" ]; then
mv "$2" /var/log/ydb/minidumps/archive/
fi
Анализ минидампов
Минидамп не содержит символов: для получения читаемого стека нужны символы того же сборочного артефакта ydbd. Для разбора используются штатные инструменты Google Breakpad (minidump_stackwalk и .sym-файлы), полученные из символов соответствующей сборки.