Ова страница је машински преведена. Прочитајте енглески оригинал. English

IBSurgeon библиотека

Како прикупити дампове за Firebird на Linux-у и генерисати стек трагове

Uvod

U slučaju ozbiljnog problema sa Firebird-om, kao što je zamrzavanje ili abnormalni prekid rada, neophodno je konfigurisati prikupljanje dump datoteka, a zatim kreirati stack trace-ove. Uz pomoć dump datoteka i stack trace-ova, Firebird core developeri iz IBSurgeon-a mogu analizirati detaljnu sliku zamrzavanja/otkaza i dati rešenje.

Analiza dump datoteka i stack trace-ova dostupna je kao deo napredne tehničke podrške za Firebird od strane IBSurgeon-a. Naši planovi počinju od USD199/server/mesečno, i uključuju podršku putem ćaskanja (WhatsApp, Telegram, itd.), tako da ćete u slučaju ozbiljnog problema imati profesionalnu pomoć gotovo odmah.
Za detalje, posetite: /sr/enterprise-subscription-plans-for-firebird/
Sve radnje u nastavku zahtevaju root ili sudoer privilegije.

1. Preduslovi

1.1 Obrišite ili Zaustavite Pakete koji Ometaju Rad

Ubuntu/Debian

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

Da biste proverili brisanje:

Code
cat /proc/sys/kernel/core_pattern

Ne bi trebalo da bude izlaza poput:

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

# Lažno brisanje
apt-get -s remove apport

# Brisanje
sudo apt-get remove apport

# Čišćenje preostalih datoteka
sudo apt-get purge apport

CentOS/RedHat

  • abrtd

Da biste proverili:

Code
cat /proc/sys/kernel/core_pattern

Ako vidite izlaz poput:

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

Zaustavite i obrišite abrtd:

Za CentOS 6:

Code
service abrtd stop

Za CentOS 7:

Code
systemctl disable abrtd.service

Uklanjanje:

Code
yum -y remove abrt*

# Čišćenje preostalih datoteka
rm -r /var/cache/abrt/

# Provera čišćenja
cat /var/log/yum.log | grep abrt

1.2 Instalacija GDB-a

GDB je neophodan za kreiranje stack trace-ova iz prikupljenih dump datoteka. Instalacija GDB-a ne utiče na performanse niti stavlja Firebird u “debug” režim.

Za CentOS:

Code
yum install gdb

Za Ubuntu/Debian:

Code
apt-get install gdb

2. Uklanjanje Ograničenja Veličine Dump Datoteka

Proverite trenutno ograničenje veličine dump datoteka:

Code
ulimit -c

Ako vidite 0, kreiranje dump datoteka je zabranjeno.

Za sisteme sa systemd-om, izmenite servisnu datoteku:

CentOS/RedHat

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

Ubuntu/Debian

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

Dodajte u [Service] sekciju:

Code
LimitCORE=infinity

Ponovo pokrenite servise:

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

Proverite neograničenu veličinu dump datoteka:

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

3. Konfiguracija Lokacije i Imenovanja Dump Datoteka

Ovaj korak je opcioni, ali se preporučuje da biste odredili smislena imena dump datoteka i obezbedili adekvatan prostor za skladištenje.

Privremena Konfiguracija

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

Trajna Konfiguracija

Dodajte u /etc/sysctl.conf:

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

Postavljanje Vlasništva

Code
chown firebird /path/to/dumps -R

4. Testiranje Prikupljanja Dump Datoteka

Preduslovi

  1. Ponovo pokrenite SSH

  2. Proverite da ulimit -c vraća “unlimited”

Test Komande za Pad Sistema

Firebird 3+ (SuperServer ili 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. Instalacija Debug Datoteka

- Debug datoteke moraju odgovarati verziji vaše Firebird build verzije

- Instalacija debug datoteka ne utiče na performanse

- Ažurirajte debug datoteke prilikom ažuriranja Firebird-a

Očekivane lokacije debug datoteka:

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 instalacije uključuju ispravne debug datoteke i automatski upravljaju ažuriranjima.

6. Kreiranje Stack Trace-ova iz Pokrenutih Procesa

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

7. Kreiranje Dump Datoteke iz Pokrenutog Procesa

Code
gcore -o /path/to/dumps/firebirdprefix $(pgrep firebird)
Alat će dodati ID procesa na prefiks.

8. Kreiranje Stack Trace-a iz Postojeće Dump Datoteke

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

9. Dubinska Analiza Dump Datoteka

Za analizu deljenih biblioteka:

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