Esta página fue traducida automáticamente. Lee el original en inglés. English

Biblioteca de IBSurgeon

Cómo recopilar dumps para Firebird en Linux y generar trazas de pila

Introducción

En caso de un problema grave con Firebird, como bloqueo o terminación anormal, es necesario configurar la recopilación de volcados y luego crear trazas de pila. Con los volcados y las trazas de pila, los desarrolladores principales de Firebird de IBSurgeon pueden analizar el panorama detallado del bloqueo/fallo y dar la solución.

El análisis de volcados y trazas de pila está disponible como parte del servicio avanzado de soporte técnico de Firebird de IBSurgeon. Nuestros planes comienzan desde USD199/servidor/mes, e incluyen soporte a través de chat (WhatsApp, Telegram, etc.), por lo que en caso de un problema grave tendrá ayuda profesional casi de inmediato.
Para más detalles, visite: /es/enterprise-subscription-plans-for-firebird/
Todas las acciones a continuación requieren acceso root o sudoer.

1. Requisitos previos

1.1 Eliminar o Detener Paquetes Interferentes

Ubuntu/Debian

  • systemd-coredump
Code
apt-get purge --auto-remove systemd-coredump

Para verificar la eliminación:

Code
cat /proc/sys/kernel/core_pattern

No debería haber una salida como:

Code
/lib/systemd/systemd-coredump%P %u %g %s %t %e
  • apport
Code
# Buscar
service --status-all | grep -m1 -i apport

# Eliminación simulada
apt-get -s remove apport

# Eliminar
sudo apt-get remove apport

# Limpiar archivos restantes
sudo apt-get purge apport

CentOS/RedHat

  • abrtd

Para verificar:

Code
cat /proc/sys/kernel/core_pattern

Si ve una salida como:

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

Detenga y elimine abrtd:

Para CentOS 6:

Code
service abrtd stop

Para CentOS 7:

Code
systemctl disable abrtd.service

Eliminar:

Code
yum -y remove abrt*

# Limpiar archivos restantes
rm -r /var/cache/abrt/

# Verificar la limpieza
cat /var/log/yum.log | grep abrt

1.2 Instalar GDB

GDB es necesario para crear trazas de pila a partir de los volcados recopilados. La instalación de GDB no afecta el rendimiento ni pone a Firebird en modo “debug”.

Para CentOS:

Code
yum install gdb

Para Ubuntu/Debian:

Code
apt-get install gdb

2. Eliminar las Limitaciones de Tamaño de Volcado

Verifique el límite actual de tamaño de volcado:

Code
ulimit -c

Si ve 0, la creación de volcados está prohibida.

Para sistemas con systemd, modifique el archivo de servicio:

CentOS/RedHat

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

Ubuntu/Debian

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

Agregue a la sección [Service]:

Code
LimitCORE=infinity

Reinicie los servicios:

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

Verifique el tamaño de volcado ilimitado:

Code
strings /proc/$(pgrep firebird)/limits

3. Configurar la Ubicación y el Nombre del Archivo de Volcado

Este paso es opcional pero muy recomendado para especificar nombres de archivo de volcado significativos y asegurar suficiente espacio de almacenamiento.

Configuración Temporal

Code
sysctl -w kernel.core_pattern=/ruta/a/volcados/core.%e.%t.%p

Configuración Permanente

Agregue a /etc/sysctl.conf:

Code
kernel.core_pattern=/ruta/a/volcados/core.%e.%t.%p

Establecer Propiedad

Code
chown firebird /ruta/a/volcados -R

4. Probar la Recopilación de Volcados

Requisitos previos

  1. Reinicie SSH

  2. Verifique que ulimit -c devuelva “unlimited”

Comandos de Prueba de Bloqueo

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

Modo Clásico

Code
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <PID_encontrado>;

5. Instalar Archivos de Depuración

- Los archivos de depuración deben coincidir con la versión de su compilación de Firebird

- Instalar archivos de depuración no afecta el rendimiento

- Actualice los archivos de depuración al actualizar Firebird

Ubicaciones esperadas de archivos de depuración:

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
Las instalaciones de HQbird incluyen los archivos de depuración correctos y manejan las actualizaciones automáticamente.

6. Crear Trazas de Pila desde Procesos en Ejecución

  1. Cree gdb-commands.txt:
Code
thread apply all bt
quit
yes
  1. Genere la traza de pila:
Code
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1

7. Crear Volcado desde un Proceso en Ejecución

Code
gcore -o /ruta/a/volcados/firebirdprefix $(pgrep firebird)
La herramienta agregará el ID del proceso al prefijo.

8. Crear Traza de Pila desde un Volcado Existente

Code
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1

9. Análisis Profundo del Volcado

Para analizar bibliotecas compartidas:

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