Comment collecter des dumps pour Firebird sur Linux et générer des traces de pile
Introduction
En cas de problème grave avec Firebird, comme un blocage ou une terminaison anormale, il est nécessaire de configurer la collecte des dumps puis de créer des traces de pile. Avec les dumps et les traces de pile, les développeurs du noyau Firebird d’IBSurgeon peuvent analyser l’image détaillée du blocage/échec et apporter la solution.
| L’analyse des dumps et des traces de pile est disponible dans le cadre du service avancé de support technique Firebird d’IBSurgeon. Nos formules commencent à partir de 199 USD/serveur/mois et incluent le support par chat (WhatsApp, Telegram, etc.), afin qu’en cas de problème grave vous bénéficiiez d’une aide professionnelle presque immédiatement. Pour plus de détails, visitez : /fr/enterprise-subscription-plans-for-firebird/ |
| Toutes les actions ci-dessous nécessitent les droits root ou sudoer. |
1. Prérequis
1.1 Supprimer ou Arrêter les Paquets Interférents
Ubuntu/Debian
- systemd-coredump
apt-get purge --auto-remove systemd-coredumpPour vérifier la suppression :
cat /proc/sys/kernel/core_patternIl ne doit pas y avoir de sortie comme :
/lib/systemd/systemd-coredump%P %u %g %s %t %e- apport
# Recherche
service --status-all | grep -m1 -i apport
# Suppression simulée
apt-get -s remove apport
# Suppression
sudo apt-get remove apport
# Nettoyage des fichiers restants
sudo apt-get purge apportCentOS/RedHat
- abrtd
Pour vérifier :
cat /proc/sys/kernel/core_patternSi vous voyez une sortie comme :
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %IArrêtez et supprimez abrtd :
Pour CentOS 6 :
service abrtd stopPour CentOS 7 :
systemctl disable abrtd.serviceSuppression :
yum -y remove abrt*
# Nettoyage des fichiers restants
rm -r /var/cache/abrt/
# Vérification du nettoyage
cat /var/log/yum.log | grep abrt1.2 Installer GDB
| GDB est requis pour créer des traces de pile à partir des dumps collectés. L’installation de GDB n’affecte pas les performances et ne met pas Firebird en mode « debug ». |
Pour CentOS :
yum install gdbPour Ubuntu/Debian :
apt-get install gdb2. Supprimer les Limitations de Taille des Dumps
Vérifiez la limite actuelle de taille des dumps :
ulimit -cSi vous voyez 0, la création de dumps est interdite.
Pour les systèmes avec systemd, modifiez le fichier de service :
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.serviceUbuntu/Debian
/lib/systemd/system/firebird-superserver.serviceAjoutez à la section [Service] :
LimitCORE=infinityRedémarrez les services :
systemctl daemon-reload
systemctl restart firebird-superserver.serviceVérifiez la taille illimitée des dumps :
strings /proc/$(pgrep firebird)/limits3. Configurer l’Emplacement et le Nommage des Fichiers de Dump
| Cette étape est facultative mais fortement recommandée pour spécifier des noms de fichiers de dump significatifs et garantir un espace de stockage adéquat. |
Configuration Temporaire
sysctl -w kernel.core_pattern=/chemin/vers/dumps/core.%e.%t.%pConfiguration Permanente
Ajoutez à /etc/sysctl.conf :
kernel.core_pattern=/chemin/vers/dumps/core.%e.%t.%pDéfinir le Propriétaire
chown firebird /chemin/vers/dumps -R4. Tester la Collecte des Dumps
Prérequis
-
Redémarrez SSH
-
Vérifiez que
ulimit -crenvoie « unlimited »
Commandes de Test de Crash
Firebird 3+ (SuperServer ou SuperClassic)
echo "shell kill -6 $(pgrep firebird);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkeyFirebird 2.5 (SuperClassic)
echo "shell kill -6 $(pgrep fb_smp_server);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkeyMode Classic
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <PID_trouvé>;5. Installer les Fichiers de Debug
| - Les fichiers de debug doivent correspondre à la version de votre build Firebird - L’installation des fichiers de debug n’affecte pas les performances - Mettez à jour les fichiers de debug lors de la mise à jour de Firebird |
Emplacements attendus des fichiers de debug :
/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| Les installations HQbird incluent les fichiers de debug corrects et gèrent les mises à jour automatiquement. |
6. Créer des Traces de Pile à partir des Processus en Cours
- Créez
gdb-commands.txt:
thread apply all bt
quit
yes- Générez la trace de pile :
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&17. Créer un Dump à partir d’un Processus en Cours
gcore -o /chemin/vers/dumps/firebirdprefix $(pgrep firebird)| L’outil ajoutera l’ID du processus au préfixe. |
8. Créer une Trace de Pile à partir d’un Dump Existant
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&19. Analyse Approfondie du Dump
Pour analyser les bibliothèques partagées :
echo -e "info sharedlibrary\nquit\n" | gdb