Як збирати дампи для 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
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