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
apt-get purge --auto-remove systemd-coredump
Om de verwijdering te verifiëren:
cat /proc/sys/kernel/core_pattern
Er mag geen uitvoer zijn zoals:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# 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:
cat /proc/sys/kernel/core_pattern
Als u uitvoer ziet zoals:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Stop en verwijder abrtd:
Voor CentOS 6:
service abrtd stop
Voor CentOS 7:
systemctl disable abrtd.service
Verwijderen:
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:
yum install gdb
Voor Ubuntu/Debian:
apt-get install gdb
2. Dumpgroottebeperkingen Verwijderen
Controleer de huidige dumpgrootte-limiet:
ulimit -c
Als u 0 ziet, is het maken van dumps verboden.
Voor systemen met systemd, wijzig het servicebestand:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Voeg toe aan de sectie [Service]:
LimitCORE=infinity
Herstart de services:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Verifieer onbeperkte dumpgrootte:
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
sysctl -w kernel.core_pattern=/pad/naar/dumps/core.%e.%t.%p
Permanente Configuratie
Voeg toe aan /etc/sysctl.conf:
kernel.core_pattern=/pad/naar/dumps/core.%e.%t.%p
Eigenaarschap Instellen
chown firebird /pad/naar/dumps -R
4. Dumpverzameling Testen
Vereisten
-
Herstart SSH
-
Verifieer dat
ulimit -c“unlimited” retourneert
Test Crash-opdrachten
Firebird 3+ (SuperServer of 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 <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:
/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
- Maak
gdb-commands.txt:
thread apply all bt
quit
yes
- Genereer stack trace:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Dump Maken van Actief Proces
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
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:
echo -e "info sharedlibrary\nquit\n" | gdb