Como coletar dumps para Firebird no Linux e gerar stack traces
Introdução
Em caso de problema sério com o Firebird, como travamento ou término anormal, é necessário configurar a coleta de dumps e então criar stack traces. Com dumps e stack traces, os desenvolvedores principais do Firebird da IBSurgeon podem analisar o quadro detalhado do travamento/falha e fornecer a solução.
| A análise de dumps e stack traces está disponível como parte do serviço avançado de suporte técnico Firebird da IBSurgeon. Nossos planos começam em USD199/servidor/mês e incluem suporte via chat (WhatsApp, Telegram, etc), então em caso de problema sério você terá ajuda profissional quase imediatamente. Para detalhes, visite: /br/enterprise-subscription-plans-for-firebird/ |
| Todas as ações abaixo exigem acesso root ou sudoer. |
1. Pré-requisitos
1.1 Excluir ou Parar Pacotes Interferentes
Ubuntu/Debian
- systemd-coredump
apt-get purge --auto-remove systemd-coredump
Para verificar a exclusão:
cat /proc/sys/kernel/core_pattern
Não deve haver saída como:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# Pesquisar
service --status-all | grep -m1 -i apport
# Exclusão simulada
apt-get -s remove apport
# Excluir
sudo apt-get remove apport
# Limpar arquivos restantes
sudo apt-get purge apport
CentOS/RedHat
- abrtd
Para verificar:
cat /proc/sys/kernel/core_pattern
Se você vir uma saída como:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Pare e exclua o abrtd:
Para CentOS 6:
service abrtd stop
Para CentOS 7:
systemctl disable abrtd.service
Remova:
yum -y remove abrt*
# Limpar arquivos restantes
rm -r /var/cache/abrt/
# Verificar limpeza
cat /var/log/yum.log | grep abrt
1.2 Instalar GDB
| O GDB é necessário para criar stack traces a partir dos dumps coletados. A instalação do GDB não afeta o desempenho nem coloca o Firebird em modo “debug”. |
Para CentOS:
yum install gdb
Para Ubuntu/Debian:
apt-get install gdb
2. Remover Limitações de Tamanho do Dump
Verifique o limite atual de tamanho do dump:
ulimit -c
Se você vir 0, a criação de dumps está proibida.
Para sistemas com systemd, modifique o arquivo de serviço:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Adicione à seção [Service]:
LimitCORE=infinity
Reinicie os serviços:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Verifique o tamanho ilimitado do dump:
strings /proc/$(pgrep firebird)/limits
3. Configurar Localização e Nomenclatura do Arquivo de Dump
| Esta etapa é opcional, mas altamente recomendada para especificar nomes significativos de arquivos de dump e garantir espaço de armazenamento adequado. |
Configuração Temporária
sysctl -w kernel.core_pattern=/caminho/para/dumps/core.%e.%t.%p
Configuração Permanente
Adicione ao /etc/sysctl.conf:
kernel.core_pattern=/caminho/para/dumps/core.%e.%t.%p
Definir Propriedade
chown firebird /caminho/para/dumps -R
4. Testar Coleta de Dumps
Pré-requisitos
-
Reinicie o SSH
-
Verifique se
ulimit -cretorna “unlimited”
Comandos de Teste 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
Modo Classic
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <PID_encontrado>;
5. Instalar Arquivos de Debug
| - Os arquivos de debug devem corresponder à versão do seu build do Firebird - Instalar arquivos de debug não afeta o desempenho - Atualize os arquivos de debug ao atualizar o Firebird |
Locais esperados dos arquivos 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
| As instalações do HQbird incluem os arquivos de debug corretos e lidam com as atualizações automaticamente. |
6. Criar Stack Traces a partir de Processos em Execução
- Crie
gdb-commands.txt:
thread apply all bt
quit
yes
- Gere o stack trace:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Criar Dump a partir de Processo em Execução
gcore -o /caminho/para/dumps/firebirdprefixo $(pgrep firebird)
| A ferramenta anexará o ID do processo ao prefixo. |
8. Criar Stack Trace a partir de Dump Existente
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1
9. Análise Profunda do Dump
Para analisar bibliotecas compartilhadas:
echo -e "info sharedlibrary\nquit\n" | gdb