Deze pagina is automatisch vertaald. Lees het Engelse origineel. English

IBSurgeon-bibliotheek

Hoe dumps te verzamelen voor Firebird op Linux en stack traces te genereren

Inleiding

In geval van een ernstig probleem met Firebird, zoals vastlopen of abnormale beëindiging, is het noodzakelijk om dumpverzameling te configureren en vervolgens stack traces te maken. Met dumps en stack traces kunnen de Firebird-kernontwikkelaars van IBSurgeon het gedetailleerde beeld van het vastlopen/de fout analyseren en de oplossing geven.

Dump- en stack trace-analyse is beschikbaar als onderdeel van de geavanceerde Firebird technische ondersteuningsservice van IBSurgeon. Onze abonnementen starten vanaf USD199/server/maand en omvatten ondersteuning via chat (WhatsApp, Telegram, etc.), zodat u bij een ernstig probleem vrijwel onmiddellijk professionele hulp heeft.
Voor details, bezoek: /nl/enterprise-subscription-plans-for-firebird/
Alle onderstaande handelingen vereisen root- of sudoer-rechten.

1. Vereisten

1.1 Verwijder of Stop Storende Pakketten

Ubuntu/Debian

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

Om de verwijdering te verifiëren:

Code
cat /proc/sys/kernel/core_pattern

Er mag geen uitvoer zijn zoals:

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

# Verwijdering simuleren
apt-get -s remove apport

# Verwijderen
sudo apt-get remove apport

# Resterende bestanden opschonen
sudo apt-get purge apport

CentOS/RedHat

  • abrtd

Om te controleren:

Code
cat /proc/sys/kernel/core_pattern

Als u uitvoer ziet zoals:

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

Stop en verwijder abrtd:

Voor CentOS 6:

Code
service abrtd stop

Voor CentOS 7:

Code
systemctl disable abrtd.service

Verwijderen:

Code
yum -y remove abrt*

# Resterende bestanden opschonen
rm -r /var/cache/abrt/

# Opschoning verifiëren
cat /var/log/yum.log | grep abrt

1.2 GDB Installeren

GDB is vereist om stack traces te maken van verzamelde dumps. GDB-installatie heeft geen invloed op de prestaties en zet Firebird niet in de “debug”-modus.

Voor CentOS:

Code
yum install gdb

Voor Ubuntu/Debian:

Code
apt-get install gdb

2. Dumpgroottebeperkingen Verwijderen

Controleer de huidige dumpgrootte-limiet:

Code
ulimit -c

Als u 0 ziet, is het maken van dumps verboden.

Voor systemen met systemd, wijzig het servicebestand:

CentOS/RedHat

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

Ubuntu/Debian

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

Voeg toe aan de sectie [Service]:

Code
LimitCORE=infinity

Herstart de services:

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

Verifieer onbeperkte dumpgrootte:

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

3. Dumpbestandslocatie en -naamgeving Configureren

Deze stap is optioneel maar sterk aanbevolen om betekenisvolle dumpbestandsnamen op te geven en voldoende opslagruimte te garanderen.

Tijdelijke Configuratie

Code
sysctl -w kernel.core_pattern=/pad/naar/dumps/core.%e.%t.%p

Permanente Configuratie

Voeg toe aan /etc/sysctl.conf:

Code
kernel.core_pattern=/pad/naar/dumps/core.%e.%t.%p

Eigenaarschap Instellen

Code
chown firebird /pad/naar/dumps -R

4. Dumpverzameling Testen

Vereisten

  1. Herstart SSH

  2. Verifieer dat ulimit -c “unlimited” retourneert

Test Crash-opdrachten

Firebird 3+ (SuperServer of 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 <gevonden_PID>;

5. Debugbestanden Installeren

- Debugbestanden moeten overeenkomen met uw Firebird-buildversie

- Het installeren van debugbestanden heeft geen invloed op de prestaties

- Werk debugbestanden bij wanneer u Firebird bijwerkt

Verwachte debugbestandslocaties:

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-installaties bevatten correcte debugbestanden en handelen updates automatisch af.

6. Stack Traces Maken van Actieve Processen

  1. Maak gdb-commands.txt:
Code
thread apply all bt
quit
yes
  1. Genereer stack trace:
Code
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1

7. Dump Maken van Actief Proces

Code
gcore -o /pad/naar/dumps/firebirdprefix $(pgrep firebird)
Het hulpprogramma voegt het proces-ID toe aan de prefix.

8. Stack Trace Maken van Bestaande Dump

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

9. Diepgaande Dumpanalyse

Om gedeelde bibliotheken te analyseren:

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