Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

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
Code
apt-get purge --auto-remove systemd-coredump

Pour vérifier la suppression :

Code
cat /proc/sys/kernel/core_pattern

Il ne doit pas y avoir de sortie comme :

Code
/lib/systemd/systemd-coredump%P %u %g %s %t %e
  • apport
Code
# 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 :

Code
cat /proc/sys/kernel/core_pattern

Si vous voyez une sortie comme :

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

Arrêtez et supprimez abrtd :

Pour CentOS 6 :

Code
service abrtd stop

Pour CentOS 7 :

Code
systemctl disable abrtd.service

Suppression :

Code
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 :

Code
yum install gdb

Pour Ubuntu/Debian :

Code
apt-get install gdb

2. Supprimer les Limitations de Taille des Dumps

Vérifiez la limite actuelle de taille des dumps :

Code
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

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

Ubuntu/Debian

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

Ajoutez à la section [Service] :

Code
LimitCORE=infinity

Redémarrez les services :

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

Vérifiez la taille illimitée des dumps :

Code
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

Code
sysctl -w kernel.core_pattern=/chemin/vers/dumps/core.%e.%t.%p

Configuration Permanente

Ajoutez à /etc/sysctl.conf :

Code
kernel.core_pattern=/chemin/vers/dumps/core.%e.%t.%p

Définir le Propriétaire

Code
chown firebird /chemin/vers/dumps -R

4. Tester la Collecte des Dumps

Prérequis

  1. Redémarrez SSH

  2. Vérifiez que ulimit -c renvoie « unlimited »

Commandes de Test de Crash

Firebird 3+ (SuperServer ou 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

Mode Classic

Code
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 :

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
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

  1. Créez gdb-commands.txt :
Code
thread apply all bt
quit
yes
  1. Générez la trace de pile :
Code
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

Code
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

Code
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 :

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