Questa pagina è stata tradotta automaticamente. Leggi l'originale in inglese. English

Libreria IBSurgeon

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
Code
apt-get purge --auto-remove systemd-coredump

Для проверки удаления:

Code
cat /proc/sys/kernel/core_pattern

Не должно быть вывода, подобного:

Code
/lib/systemd/systemd-coredump%P %u %g %s %t %e
  • apport
Code
# Поиск
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

Для проверки:

Code
cat /proc/sys/kernel/core_pattern

Если вы видите вывод, подобный:

Code
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I

Остановите и удалите abrtd:

Для CentOS 6:

Code
service abrtd stop

Для CentOS 7:

Code
systemctl disable abrtd.service

Удаление:

Code
yum -y remove abrt*

# Очистка оставшихся файлов
rm -r /var/cache/abrt/

# Проверка очистки
cat /var/log/yum.log | grep abrt

1.2 Установка GDB

GDB требуется для создания стек-трейсов из собранных дампов. Установка GDB не влияет на производительность и не переводит Firebird в режим “отладки”.

Для CentOS:

Code
yum install gdb

Для Ubuntu/Debian:

Code
apt-get install gdb

2. Снятие ограничений на размер дампа

Проверьте текущее ограничение размера дампа:

Code
ulimit -c

Если вы видите 0, создание дампов запрещено.

Для систем с systemd измените файл службы:

CentOS/RedHat

Code
/usr/lib/systemd/system/firebird-superserver.service

Ubuntu/Debian

Code
/lib/systemd/system/firebird-superserver.service

Добавьте в секцию [Service]:

Code
LimitCORE=infinity

Перезапустите службы:

Code
systemctl daemon-reload
systemctl restart firebird-superserver.service

Проверьте неограниченный размер дампа:

Code
strings /proc/$(pgrep firebird)/limits

3. Настройка расположения и именования файлов дампов

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

Временная конфигурация

Code
sysctl -w kernel.core_pattern=/path/to/dumps/core.%e.%t.%p

Постоянная конфигурация

Добавьте в /etc/sysctl.conf:

Code
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p

Установка владельца

Code
chown firebird /path/to/dumps -R

4. Тестирование сбора дампов

Предварительные требования

  1. Перезапустите SSH

  2. Убедитесь, что ulimit -c возвращает “unlimited”

Команды тестового сбоя

Firebird 3+ (SuperServer или SuperClassic)

Code
echo "shell kill -6 $(pgrep firebird);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkey

Firebird 2.5 (SuperClassic)

Code
echo "shell kill -6 $(pgrep fb_smp_server);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkey

Классический режим

Code
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <найденный_PID>;

5. Установка отладочных файлов

- Отладочные файлы должны соответствовать версии вашей сборки Firebird

- Установка отладочных файлов не влияет на производительность

- Обновляйте отладочные файлы при обновлении Firebird

Ожидаемые расположения отладочных файлов:

Code
/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. Создание стек-трейсов из запущенных процессов

  1. Создайте gdb-commands.txt:
Code
thread apply all bt
quit
yes
  1. Создайте стек-трейс:
Code
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1

7. Создание дампа из запущенного процесса

Code
gcore -o /path/to/dumps/firebirdprefix $(pgrep firebird)
Инструмент добавит идентификатор процесса к префиксу.

8. Создание стек-трейса из существующего дампа

Code
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1

9. Глубокий анализ дампа

Для анализа общих библиотек:

Code
echo -e "info sharedlibrary\nquit\n" | gdb