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-coredump
Pour vérifier la suppression :
cat /proc/sys/kernel/core_pattern
Il 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 apport
CentOS/RedHat
- abrtd
Pour vérifier :
cat /proc/sys/kernel/core_pattern
Si vous voyez une sortie comme :
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Arrêtez et supprimez abrtd :
Pour CentOS 6 :
service abrtd stop
Pour CentOS 7 :
systemctl disable abrtd.service
Suppression :
yum -y remove abrt*
# Nettoyage des fichiers restants
rm -r /var/cache/abrt/
# Vérification du nettoyage
cat /var/log/yum.log | grep abrt
1.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 gdb
Pour Ubuntu/Debian :
apt-get install gdb
2. Supprimer les Limitations de Taille des Dumps
Vérifiez la limite actuelle de taille des dumps :
ulimit -c
Si 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.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Ajoutez à la section [Service] :
LimitCORE=infinity
Redémarrez les services :
systemctl daemon-reload
systemctl restart firebird-superserver.service
Vérifiez la taille illimitée des dumps :
strings /proc/$(pgrep firebird)/limits
3. 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.%p
Configuration Permanente
Ajoutez à /etc/sysctl.conf :
kernel.core_pattern=/chemin/vers/dumps/core.%e.%t.%p
Définir le Propriétaire
chown firebird /chemin/vers/dumps -R
4. 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 masterkey
Firebird 2.5 (SuperClassic)
echo "shell kill -6 $(pgrep fb_smp_server);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkey
Mode 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>&1
7. 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>&1
9. Analyse Approfondie du Dump
Pour analyser les bibliothèques partagées :
echo -e "info sharedlibrary\nquit\n" | gdb