Како прикупити дампове за 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
apt-get purge --auto-remove systemd-coredump
Da biste proverili brisanje:
cat /proc/sys/kernel/core_pattern
Ne bi trebalo da bude izlaza poput:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# 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:
cat /proc/sys/kernel/core_pattern
Ako vidite izlaz poput:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Zaustavite i obrišite abrtd:
Za CentOS 6:
service abrtd stop
Za CentOS 7:
systemctl disable abrtd.service
Uklanjanje:
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:
yum install gdb
Za Ubuntu/Debian:
apt-get install gdb
2. Uklanjanje Ograničenja Veličine Dump Datoteka
Proverite trenutno ograničenje veličine dump datoteka:
ulimit -c
Ako vidite 0, kreiranje dump datoteka je zabranjeno.
Za sisteme sa systemd-om, izmenite servisnu datoteku:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Dodajte u [Service] sekciju:
LimitCORE=infinity
Ponovo pokrenite servise:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Proverite neograničenu veličinu dump datoteka:
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
sysctl -w kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Trajna Konfiguracija
Dodajte u /etc/sysctl.conf:
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Postavljanje Vlasništva
chown firebird /path/to/dumps -R
4. Testiranje Prikupljanja Dump Datoteka
Preduslovi
-
Ponovo pokrenite SSH
-
Proverite da
ulimit -cvraća “unlimited”
Test Komande za Pad Sistema
Firebird 3+ (SuperServer ili 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 Mode
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:
/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
- Kreirajte
gdb-commands.txt:
thread apply all bt
quit
yes
- Generišite stack trace:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Kreiranje Dump Datoteke iz Pokrenutog Procesa
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
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:
echo -e "info sharedlibrary\nquit\n" | gdb