Jak shromažďovat dumpy pro Firebird na Linuxu a generovat stack trace
Úvod
V případě vážného problému s Firebirdem, jako je zablokování nebo abnormální ukončení, je nutné nakonfigurovat sběr dumpů a poté vytvořit stack trace. Díky dumpům a stack trace mohou vývojáři Firebird core z IBSurgeon analyzovat detailní obraz zablokování/selhání a poskytnout řešení.
| Analýza dumpů a stack trace je dostupná jako součást pokročilé technické podpory Firebird od IBSurgeon. Naše plány začínají od USD199/server/měsíc a zahrnují podporu přes chat (WhatsApp, Telegram atd.), takže v případě vážného problému budete mít profesionální pomoc téměř okamžitě. Podrobnosti naleznete na: /cs/enterprise-subscription-plans-for-firebird/ |
| Všechny níže uvedené kroky vyžadují root nebo sudoer. |
1. Předpoklady
1.1 Odstranění nebo zastavení rušivých balíčků
Ubuntu/Debian
- systemd-coredump
apt-get purge --auto-remove systemd-coredump
Pro ověření odstranění:
cat /proc/sys/kernel/core_pattern
Neměl by se zobrazit žádný výstup jako:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# Vyhledání
service --status-all | grep -m1 -i apport
# Simulace odstranění
apt-get -s remove apport
# Odstranění
sudo apt-get remove apport
# Vyčištění zbývajících souborů
sudo apt-get purge apport
CentOS/RedHat
- abrtd
Pro kontrolu:
cat /proc/sys/kernel/core_pattern
Pokud vidíte výstup jako:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Zastavte a odstraňte abrtd:
Pro CentOS 6:
service abrtd stop
Pro CentOS 7:
systemctl disable abrtd.service
Odstranění:
yum -y remove abrt*
# Vyčištění zbývajících souborů
rm -r /var/cache/abrt/
# Ověření vyčištění
cat /var/log/yum.log | grep abrt
1.2 Instalace GDB
| GDB je vyžadován pro vytváření stack trace ze shromážděných dumpů. Instalace GDB neovlivňuje výkon ani nepřepíná Firebird do “debug” režimu. |
Pro CentOS:
yum install gdb
Pro Ubuntu/Debian:
apt-get install gdb
2. Odstranění omezení velikosti dumpu
Zkontrolujte aktuální limit velikosti dumpu:
ulimit -c
Pokud vidíte 0, vytváření dumpů je zakázáno.
Pro systémy se systemd upravte soubor služby:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Přidejte do sekce [Service]:
LimitCORE=infinity
Restartujte služby:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Ověřte neomezenou velikost dumpu:
strings /proc/$(pgrep firebird)/limits
3. Konfigurace umístění a pojmenování souborů dumpu
| Tento krok je volitelný, ale vysoce doporučený pro specifikaci smysluplných názvů souborů dumpu a zajištění dostatečného úložného prostoru. |
Dočasná konfigurace
sysctl -w kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Trvalá konfigurace
Přidejte do /etc/sysctl.conf:
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Nastavení vlastnictví
chown firebird /path/to/dumps -R
4. Test sběru dumpů
Předpoklady
-
Restartujte SSH
-
Ověřte, že
ulimit -cvrací “unlimited”
Testovací příkazy pro pád
Firebird 3+ (SuperServer nebo 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
Classic Mode
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <found_PID>;
5. Instalace debug souborů
| - Debug soubory musí odpovídat verzi vašeho Firebird buildu - Instalace debug souborů neovlivňuje výkon - Aktualizujte debug soubory při aktualizaci Firebirdu |
Očekávaná umístění debug souborů:
/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
| Instalace HQbird zahrnují správné debug soubory a automaticky zpracovávají aktualizace. |
6. Vytvoření stack trace z běžících procesů
- Vytvořte
gdb-commands.txt:
thread apply all bt
quit
yes
- Vygenerujte stack trace:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Vytvoření dumpu z běžícího procesu
gcore -o /path/to/dumps/firebirdprefix $(pgrep firebird)
| Nástroj připojí ID procesu k prefixu. |
8. Vytvoření stack trace z existujícího dumpu
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1
9. Hloubková analýza dumpu
Pro analýzu sdílených knihoven:
echo -e "info sharedlibrary\nquit\n" | gdb