Цю сторінку перекладено машинним перекладом. Читайте англійський оригінал. English

Бібліотека IBSurgeon

Як збирати дампи для Firebird на Linux та генерувати стек-трейси

Вступ

У разі серйозної проблеми з Firebird, як-от зависання або аномальне завершення роботи, необхідно налаштувати збір дампів, а потім створити стек-трейси. За допомогою дампів і стек-трейсів розробники ядра Firebird з IBSurgeon можуть проаналізувати детальну картину зависання/збою та надати рішення.

Аналіз дампів і стек-трейсів доступний у рамках розширеного сервісу технічної підтримки Firebird від IBSurgeon. Наші тарифи починаються від 199 доларів США/сервер/місяць і включають підтримку через чат (WhatsApp, Telegram тощо), тож у разі серйозної проблеми ви отримаєте професійну допомогу майже миттєво.
Детальніше: /uk/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