Come raccogliere i dump per Firebird su Linux e generare stack trace
Введение
В случае серьезной проблемы с Firebird, такой как зависание или аварийное завершение, необходимо настроить сбор дампов и затем создать стек-трейсы. С помощью дампов и стек-трейсов разработчики ядра Firebird из IBSurgeon могут проанализировать детальную картину зависания/сбоя и предложить решение.
| Анализ дампов и стек-трейсов доступен в рамках расширенной услуги технической поддержки Firebird от IBSurgeon. Наши тарифы начинаются от 199 долларов США/сервер/месяц и включают поддержку через чат (WhatsApp, Telegram и т. д.), поэтому в случае серьезной проблемы вы получите профессиональную помощь практически мгновенно. Подробнее: /it/enterprise-subscription-plans-for-firebird/ |
| Все действия ниже требуют прав root или sudoer. |
1. Предварительные требования
1.1 Удаление или остановка мешающих пакетов
Ubuntu/Debian
- systemd-coredump
apt-get purge --auto-remove systemd-coredump
Для проверки удаления:
cat /proc/sys/kernel/core_pattern
Не должно быть вывода, подобного:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# Поиск
service --status-all | grep -m1 -i apport
# Имитация удаления
apt-get -s remove apport
# Удаление
sudo apt-get remove apport
# Очистка оставшихся файлов
sudo apt-get purge apport
CentOS/RedHat
- abrtd
Для проверки:
cat /proc/sys/kernel/core_pattern
Если вы видите вывод, подобный:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Остановите и удалите abrtd:
Для CentOS 6:
service abrtd stop
Для CentOS 7:
systemctl disable abrtd.service
Удаление:
yum -y remove abrt*
# Очистка оставшихся файлов
rm -r /var/cache/abrt/
# Проверка очистки
cat /var/log/yum.log | grep abrt
1.2 Установка GDB
| GDB требуется для создания стек-трейсов из собранных дампов. Установка GDB не влияет на производительность и не переводит Firebird в режим “отладки”. |
Для CentOS:
yum install gdb
Для Ubuntu/Debian:
apt-get install gdb
2. Снятие ограничений на размер дампа
Проверьте текущее ограничение размера дампа:
ulimit -c
Если вы видите 0, создание дампов запрещено.
Для систем с systemd измените файл службы:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Добавьте в секцию [Service]:
LimitCORE=infinity
Перезапустите службы:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Проверьте неограниченный размер дампа:
strings /proc/$(pgrep firebird)/limits
3. Настройка расположения и именования файлов дампов
| Этот шаг необязателен, но настоятельно рекомендуется для указания осмысленных имен файлов дампов и обеспечения достаточного дискового пространства. |
Временная конфигурация
sysctl -w kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Постоянная конфигурация
Добавьте в /etc/sysctl.conf:
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Установка владельца
chown firebird /path/to/dumps -R
4. Тестирование сбора дампов
Предварительные требования
-
Перезапустите SSH
-
Убедитесь, что
ulimit -cвозвращает “unlimited”
Команды тестового сбоя
Firebird 3+ (SuperServer или SuperClassic)
echo "shell kill -6 $(pgrep firebird);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkey
Firebird 2.5 (SuperClassic)
echo "shell kill -6 $(pgrep fb_smp_server);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkey
Классический режим
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <найденный_PID>;
5. Установка отладочных файлов
| - Отладочные файлы должны соответствовать версии вашей сборки Firebird - Установка отладочных файлов не влияет на производительность - Обновляйте отладочные файлы при обновлении Firebird |
Ожидаемые расположения отладочных файлов:
/opt/firebird/bin/.debug/firebird.debug
/opt/firebird/bin/.debug/gbak.debug
/opt/firebird/bin/.debug/isql.debug
/opt/firebird/lib/.debug/libfbclient.so.3.0.11.debug
/opt/firebird/lib/.debug/libib_util.so.debug
/opt/firebird/plugins/.debug/libfbtrace.so.debug
/opt/firebird/plugins/.debug/libEngine12.so.debug
| Установки HQbird включают корректные отладочные файлы и автоматически обрабатывают обновления. |
6. Создание стек-трейсов из запущенных процессов
- Создайте
gdb-commands.txt:
thread apply all bt
quit
yes
- Создайте стек-трейс:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Создание дампа из запущенного процесса
gcore -o /path/to/dumps/firebirdprefix $(pgrep firebird)
| Инструмент добавит идентификатор процесса к префиксу. |
8. Создание стек-трейса из существующего дампа
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1
9. Глубокий анализ дампа
Для анализа общих библиотек:
echo -e "info sharedlibrary\nquit\n" | gdb