Tato stránka byla strojově přeložena. Přečtěte si anglický originál. English

Knihovna IBSurgeon

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

Pro ověření odstranění:

Code
cat /proc/sys/kernel/core_pattern

Neměl by se zobrazit žádný výstup jako:

Code
/lib/systemd/systemd-coredump%P %u %g %s %t %e
  • apport
Code
# 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:

Code
cat /proc/sys/kernel/core_pattern

Pokud vidíte výstup jako:

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

Zastavte a odstraňte abrtd:

Pro CentOS 6:

Code
service abrtd stop

Pro CentOS 7:

Code
systemctl disable abrtd.service

Odstranění:

Code
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:

Code
yum install gdb

Pro Ubuntu/Debian:

Code
apt-get install gdb

2. Odstranění omezení velikosti dumpu

Zkontrolujte aktuální limit velikosti dumpu:

Code
ulimit -c

Pokud vidíte 0, vytváření dumpů je zakázáno.

Pro systémy se systemd upravte soubor služby:

CentOS/RedHat

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

Ubuntu/Debian

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

Přidejte do sekce [Service]:

Code
LimitCORE=infinity

Restartujte služby:

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

Ověřte neomezenou velikost dumpu:

Code
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

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

Trvalá konfigurace

Přidejte do /etc/sysctl.conf:

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

Nastavení vlastnictví

Code
chown firebird /path/to/dumps -R

4. Test sběru dumpů

Předpoklady

  1. Restartujte SSH

  2. Ověřte, že ulimit -c vrací “unlimited”

Testovací příkazy pro pád

Firebird 3+ (SuperServer nebo 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

Classic Mode

Code
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ů:

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
Instalace HQbird zahrnují správné debug soubory a automaticky zpracovávají aktualizace.

6. Vytvoření stack trace z běžících procesů

  1. Vytvořte gdb-commands.txt:
Code
thread apply all bt
quit
yes
  1. Vygenerujte stack trace:
Code
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

Code
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

Code
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:

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