Diese Seite wurde maschinell übersetzt. Lesen Sie das englische Original. English

IBSurgeon-Bibliothek

So sammeln Sie Dumps für Firebird unter Linux und erzeugen Stack-Traces

Einführung

Im Falle eines schwerwiegenden Problems mit Firebird, wie z. B. Hängen oder abnormaler Beendigung, ist es notwendig, die Dump-Erfassung zu konfigurieren und dann Stack-Traces zu erstellen. Mit Dumps und Stack-Traces können die Firebird-Kernentwickler von IBSurgeon das detaillierte Bild des Hängens/Fehlers analysieren und eine Lösung anbieten.

Die Analyse von Dumps und Stack-Traces ist als Teil des erweiterten Firebird-Technischen-Supports von IBSurgeon verfügbar. Unsere Pläne beginnen bei USD199/Server/Monat und beinhalten Support über Chat (WhatsApp, Telegram usw.), sodass Sie bei einem schwerwiegenden Problem fast sofort professionelle Hilfe erhalten.
Details finden Sie unter: /de/enterprise-subscription-plans-for-firebird/
Alle unten aufgeführten Aktionen erfordern Root- oder Sudoer-Rechte.

1. Voraussetzungen

1.1 Störende Pakete löschen oder stoppen

Ubuntu/Debian

  • systemd-coredump
Code
apt-get purge --auto-remove systemd-coredump

Um die Löschung zu überprüfen:

Code
cat /proc/sys/kernel/core_pattern

Es sollte keine Ausgabe wie diese erscheinen:

Code
/lib/systemd/systemd-coredump%P %u %g %s %t %e
  • apport
Code
# Suche
service --status-all | grep -m1 -i apport

# Löschung simulieren
apt-get -s remove apport

# Löschen
sudo apt-get remove apport

# Verbleibende Dateien bereinigen
sudo apt-get purge apport

CentOS/RedHat

  • abrtd

Zur Überprüfung:

Code
cat /proc/sys/kernel/core_pattern

Wenn Sie eine Ausgabe wie diese sehen:

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

Stoppen und löschen Sie abrtd:

Für CentOS 6:

Code
service abrtd stop

Für CentOS 7:

Code
systemctl disable abrtd.service

Entfernen:

Code
yum -y remove abrt*

# Verbleibende Dateien bereinigen
rm -r /var/cache/abrt/

# Bereinigung überprüfen
cat /var/log/yum.log | grep abrt

1.2 GDB installieren

GDB ist erforderlich, um Stack-Traces aus gesammelten Dumps zu erstellen. Die GDB-Installation beeinträchtigt die Leistung nicht und versetzt Firebird nicht in den “Debug”-Modus.

Für CentOS:

Code
yum install gdb

Für Ubuntu/Debian:

Code
apt-get install gdb

2. Dump-Größenbeschränkungen entfernen

Aktuelles Dump-Größenlimit prüfen:

Code
ulimit -c

Wenn Sie 0 sehen, ist die Dump-Erstellung deaktiviert.

Für Systeme mit systemd die Servicedatei ändern:

CentOS/RedHat

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

Ubuntu/Debian

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

Zum Abschnitt [Service] hinzufügen:

Code
LimitCORE=infinity

Dienste neu starten:

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

Unbegrenzte Dump-Größe überprüfen:

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

3. Speicherort und Benennung der Dump-Dateien konfigurieren

Dieser Schritt ist optional, aber sehr empfehlenswert, um aussagekräftige Dump-Dateinamen festzulegen und ausreichend Speicherplatz sicherzustellen.

Temporäre Konfiguration

Code
sysctl -w kernel.core_pattern=/pfad/zu/dumps/core.%e.%t.%p

Dauerhafte Konfiguration

Zu /etc/sysctl.conf hinzufügen:

Code
kernel.core_pattern=/pfad/zu/dumps/core.%e.%t.%p

Besitzer festlegen

Code
chown firebird /pfad/zu/dumps -R

4. Dump-Erfassung testen

Voraussetzungen

  1. SSH neu starten

  2. Überprüfen, dass ulimit -c “unlimited” zurückgibt

Test-Absturzbefehle

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

Code
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <gefundene_PID>;

5. Debug-Dateien installieren

- Debug-Dateien müssen mit Ihrer Firebird-Build-Version übereinstimmen

- Die Installation von Debug-Dateien beeinträchtigt die Leistung nicht

- Debug-Dateien bei Firebird-Updates aktualisieren

Erwartete Speicherorte der Debug-Dateien:

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-Installationen enthalten korrekte Debug-Dateien und aktualisieren diese automatisch.

6. Stack-Traces aus laufenden Prozessen erstellen

  1. gdb-commands.txt erstellen:
Code
thread apply all bt
quit
yes
  1. Stack-Trace generieren:
Code
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1

7. Dump aus laufendem Prozess erstellen

Code
gcore -o /pfad/zu/dumps/firebirdprefix $(pgrep firebird)
Das Tool fügt die Prozess-ID an das Präfix an.

8. Stack-Trace aus vorhandenem Dump erstellen

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

9. Tiefgehende Dump-Analyse

Zur Analyse gemeinsamer Bibliotheken:

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