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-coredumpPara verificar la eliminación:
cat /proc/sys/kernel/core_patternNo 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 apportCentOS/RedHat
- abrtd
Para verificar:
cat /proc/sys/kernel/core_patternSi ve una salida como:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %IDetenga y elimine abrtd:
Para CentOS 6:
service abrtd stopPara CentOS 7:
systemctl disable abrtd.serviceEliminar:
yum -y remove abrt*
# Limpiar archivos restantes
rm -r /var/cache/abrt/
# Verificar la limpieza
cat /var/log/yum.log | grep abrt1.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 gdbPara Ubuntu/Debian:
apt-get install gdb2. Eliminar las Limitaciones de Tamaño de Volcado
Verifique el límite actual de tamaño de volcado:
ulimit -cSi 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.serviceUbuntu/Debian
/lib/systemd/system/firebird-superserver.serviceAgregue a la sección [Service]:
LimitCORE=infinityReinicie los servicios:
systemctl daemon-reload
systemctl restart firebird-superserver.serviceVerifique el tamaño de volcado ilimitado:
strings /proc/$(pgrep firebird)/limits3. 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.%pConfiguración Permanente
Agregue a /etc/sysctl.conf:
kernel.core_pattern=/ruta/a/volcados/core.%e.%t.%pEstablecer Propiedad
chown firebird /ruta/a/volcados -R4. 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 masterkeyFirebird 2.5 (SuperClassic)
echo "shell kill -6 $(pgrep fb_smp_server);" | /opt/firebird/bin/isql -q localhost:employee -user sysdba -pas masterkeyModo 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>&17. 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>&19. Análisis Profundo del Volcado
Para analizar bibliotecas compartidas:
echo -e "info sharedlibrary\nquit\n" | gdb