Esta página foi traduzida por máquina. Leia o original em inglês. English

Biblioteca IBSurgeon

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

Para verificar a exclusão:

Code
cat /proc/sys/kernel/core_pattern

Não deve haver saída como:

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

Code
cat /proc/sys/kernel/core_pattern

Se você vir uma saída como:

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

Pare e exclua o abrtd:

Para CentOS 6:

Code
service abrtd stop

Para CentOS 7:

Code
systemctl disable abrtd.service

Remova:

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

Code
yum install gdb

Para Ubuntu/Debian:

Code
apt-get install gdb

2. Remover Limitações de Tamanho do Dump

Verifique o limite atual de tamanho do dump:

Code
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

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

Ubuntu/Debian

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

Adicione à seção [Service]:

Code
LimitCORE=infinity

Reinicie os serviços:

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

Verifique o tamanho ilimitado do dump:

Code
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

Code
sysctl -w kernel.core_pattern=/caminho/para/dumps/core.%e.%t.%p

Configuração Permanente

Adicione ao /etc/sysctl.conf:

Code
kernel.core_pattern=/caminho/para/dumps/core.%e.%t.%p

Definir Propriedade

Code
chown firebird /caminho/para/dumps -R

4. Testar Coleta de Dumps

Pré-requisitos

  1. Reinicie o SSH

  2. Verifique se ulimit -c retorna “unlimited”

Comandos de Teste 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

Modo Classic

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

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

  1. Crie gdb-commands.txt:
Code
thread apply all bt
quit
yes
  1. Gere o stack trace:
Code
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

Code
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

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

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