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
apt-get purge --auto-remove systemd-coredump
Um die Löschung zu überprüfen:
cat /proc/sys/kernel/core_pattern
Es sollte keine Ausgabe wie diese erscheinen:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# 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:
cat /proc/sys/kernel/core_pattern
Wenn Sie eine Ausgabe wie diese sehen:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Stoppen und löschen Sie abrtd:
Für CentOS 6:
service abrtd stop
Für CentOS 7:
systemctl disable abrtd.service
Entfernen:
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:
yum install gdb
Für Ubuntu/Debian:
apt-get install gdb
2. Dump-Größenbeschränkungen entfernen
Aktuelles Dump-Größenlimit prüfen:
ulimit -c
Wenn Sie 0 sehen, ist die Dump-Erstellung deaktiviert.
Für Systeme mit systemd die Servicedatei ändern:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Zum Abschnitt [Service] hinzufügen:
LimitCORE=infinity
Dienste neu starten:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Unbegrenzte Dump-Größe überprüfen:
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
sysctl -w kernel.core_pattern=/pfad/zu/dumps/core.%e.%t.%p
Dauerhafte Konfiguration
Zu /etc/sysctl.conf hinzufügen:
kernel.core_pattern=/pfad/zu/dumps/core.%e.%t.%p
Besitzer festlegen
chown firebird /pfad/zu/dumps -R
4. Dump-Erfassung testen
Voraussetzungen
-
SSH neu starten
-
Überprüfen, dass
ulimit -c“unlimited” zurückgibt
Test-Absturzbefehle
Firebird 3+ (SuperServer oder 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-Modus
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:
/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
gdb-commands.txterstellen:
thread apply all bt
quit
yes
- Stack-Trace generieren:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Dump aus laufendem Prozess erstellen
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
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:
echo -e "info sharedlibrary\nquit\n" | gdb