LinuxでFirebirdのダンプを収集し、スタックトレースを生成する方法
はじめに
Firebirdでハングアップや異常終了などの深刻な問題が発生した場合、ダンプ収集を設定し、スタックトレースを作成する必要があります。ダンプとスタックトレースにより、IBSurgeonのFirebirdコア開発者がハングアップ/障害の詳細な状況を分析し、解決策を提供できます。
| ダンプおよびスタックトレース分析は、IBSurgeonの高度なFirebirdテクニカルサポートサービスの一部として利用できます。プランはUSD199/サーバー/月から始まり、チャット(WhatsApp、Telegramなど)によるサポートが含まれているため、深刻な問題が発生した場合でもほぼ即座に専門家の支援を受けることができます。 詳細については、/ja/enterprise-subscription-plans-for-firebird/をご覧ください。 |
| 以下のすべての操作にはrootまたはsudoer権限が必要です。 |
1. 前提条件
1.1 干渉するパッケージの削除または停止
Ubuntu/Debian
- systemd-coredump
apt-get purge --auto-remove systemd-coredump
削除を確認するには:
cat /proc/sys/kernel/core_pattern
次のような出力があってはなりません:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# 検索
service --status-all | grep -m1 -i apport
# 削除のシミュレーション
apt-get -s remove apport
# 削除
sudo apt-get remove apport
# 残存ファイルのクリーンアップ
sudo apt-get purge apport
CentOS/RedHat
- abrtd
確認するには:
cat /proc/sys/kernel/core_pattern
次のような出力が表示される場合:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
abrtdを停止して削除します:
CentOS 6の場合:
service abrtd stop
CentOS 7の場合:
systemctl disable abrtd.service
削除:
yum -y remove abrt*
# 残存ファイルのクリーンアップ
rm -r /var/cache/abrt/
# クリーンアップの確認
cat /var/log/yum.log | grep abrt
1.2 GDBのインストール
| GDBは収集したダンプからスタックトレースを作成するために必要です。GDBのインストールはパフォーマンスに影響を与えず、Firebirdを「デバッグ」モードにすることもありません。 |
CentOSの場合:
yum install gdb
Ubuntu/Debianの場合:
apt-get install gdb
2. ダンプサイズ制限の解除
現在のダンプサイズ制限を確認:
ulimit -c
0が表示される場合、ダンプ作成は禁止されています。
systemdを使用するシステムでは、サービスファイルを変更します:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
[Service]セクションに追加:
LimitCORE=infinity
サービスを再起動:
systemctl daemon-reload
systemctl restart firebird-superserver.service
無制限のダンプサイズを確認:
strings /proc/$(pgrep firebird)/limits
3. ダンプファイルの場所と命名の設定
| この手順は任意ですが、意味のあるダンプファイル名を指定し、十分なストレージ容量を確保するために強く推奨されます。 |
一時的な設定
sysctl -w kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
永続的な設定
/etc/sysctl.confに追加:
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
所有権の設定
chown firebird /path/to/dumps -R
4. ダンプ収集のテスト
前提条件
-
SSHを再起動
-
ulimit -cが「unlimited」を返すことを確認
テストクラッシュコマンド
Firebird 3+(SuperServerまたは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
クラシックモード
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <見つかったPID>;
5. デバッグファイルのインストール
| - デバッグファイルはFirebirdのビルドバージョンと一致している必要があります - デバッグファイルのインストールはパフォーマンスに影響しません - Firebirdを更新する際はデバッグファイルも更新してください |
期待されるデバッグファイルの場所:
/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
| HQbirdのインストールには正しいデバッグファイルが含まれており、更新も自動的に処理されます。 |
6. 実行中プロセスからのスタックトレース作成
gdb-commands.txtを作成:
thread apply all bt
quit
yes
- スタックトレースを生成:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. 実行中プロセスからのダンプ作成
gcore -o /path/to/dumps/firebirdprefix $(pgrep firebird)
| ツールはプレフィックスにプロセスIDを追加します。 |
8. 既存ダンプからのスタックトレース作成
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1
9. 詳細なダンプ分析
共有ライブラリを分析するには:
echo -e "info sharedlibrary\nquit\n" | gdb