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
apt-get purge --auto-remove systemd-coredump
Para verificar la eliminación:
cat /proc/sys/kernel/core_pattern
No debería haber una salida como:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# 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:
cat /proc/sys/kernel/core_pattern
Si ve una salida como:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Detenga y elimine abrtd:
Para CentOS 6:
service abrtd stop
Para CentOS 7:
systemctl disable abrtd.service
Eliminar:
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:
yum install gdb
Para Ubuntu/Debian:
apt-get install gdb
2. Eliminar las Limitaciones de Tamaño de Volcado
Verifique el límite actual de tamaño de volcado:
ulimit -c
Si ve 0, la creación de volcados está prohibida.
Para sistemas con systemd, modifique el archivo de servicio:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Agregue a la sección [Service]:
LimitCORE=infinity
Reinicie los servicios:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Verifique el tamaño de volcado ilimitado:
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
sysctl -w kernel.core_pattern=/ruta/a/volcados/core.%e.%t.%p
Configuración Permanente
Agregue a /etc/sysctl.conf:
kernel.core_pattern=/ruta/a/volcados/core.%e.%t.%p
Establecer Propiedad
chown firebird /ruta/a/volcados -R
4. Probar la Recopilación de Volcados
Requisitos previos
-
Reinicie SSH
-
Verifique que
ulimit -cdevuelva “unlimited”
Comandos de Prueba de Bloqueo
Firebird 3+ (SuperServer o 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
Modo Clásico
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:
/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
- Cree
gdb-commands.txt:
thread apply all bt
quit
yes
- Genere la traza de pila:
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
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
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:
echo -e "info sharedlibrary\nquit\n" | gdb