Cách thu thập dump cho Firebird trên Linux và tạo stack traces
Giới thiệu
Trong trường hợp gặp sự cố nghiêm trọng với Firebird, như treo hoặc kết thúc bất thường, cần phải cấu hình thu thập dump và sau đó tạo stack traces. Với dump và stack traces, các nhà phát triển lõi Firebird của IBSurgeon có thể phân tích chi tiết tình trạng treo/lỗi và đưa ra giải pháp.
| Phân tích dump và stack traces có sẵn như một phần của dịch vụ hỗ trợ kỹ thuật Firebird nâng cao từ IBSurgeon. Các gói của chúng tôi bắt đầu từ USD199/máy chủ/tháng, bao gồm hỗ trợ qua chat (WhatsApp, Telegram, v.v.), vì vậy trong trường hợp gặp sự cố nghiêm trọng, bạn sẽ nhận được trợ giúp chuyên nghiệp gần như ngay lập tức. Để biết chi tiết, truy cập: /vi/enterprise-subscription-plans-for-firebird/ |
| Tất cả các thao tác bên dưới yêu cầu quyền root hoặc sudoer. |
1. Điều kiện tiên quyết
1.1 Xóa hoặc Dừng Các Gói Can Thiệp
Ubuntu/Debian
- systemd-coredump
apt-get purge --auto-remove systemd-coredump
Để xác minh việc xóa:
cat /proc/sys/kernel/core_pattern
Không được có kết quả như:
/lib/systemd/systemd-coredump%P %u %g %s %t %e
- apport
# Tìm kiếm
service --status-all | grep -m1 -i apport
# Xóa thử
apt-get -s remove apport
# Xóa
sudo apt-get remove apport
# Dọn các tệp còn lại
sudo apt-get purge apport
CentOS/RedHat
- abrtd
Để kiểm tra:
cat /proc/sys/kernel/core_pattern
Nếu bạn thấy kết quả như:
/usr/libexec/abrt-hook-ccpp %s %c %p %u %g%t e %P %I
Dừng và xóa abrtd:
Đối với CentOS 6:
service abrtd stop
Đối với CentOS 7:
systemctl disable abrtd.service
Xóa:
yum -y remove abrt*
# Dọn các tệp còn lại
rm -r /var/cache/abrt/
# Xác minh việc dọn dẹp
cat /var/log/yum.log | grep abrt
1.2 Cài đặt GDB
| GDB được yêu cầu để tạo stack traces từ các dump đã thu thập. Việc cài đặt GDB không ảnh hưởng đến hiệu suất hoặc đưa Firebird vào chế độ “debug”. |
Đối với CentOS:
yum install gdb
Đối với Ubuntu/Debian:
apt-get install gdb
2. Xóa Giới Hạn Kích Thước Dump
Kiểm tra giới hạn kích thước dump hiện tại:
ulimit -c
Nếu bạn thấy 0, việc tạo dump bị cấm.
Đối với các hệ thống sử dụng systemd, hãy sửa tệp dịch vụ:
CentOS/RedHat
/usr/lib/systemd/system/firebird-superserver.service
Ubuntu/Debian
/lib/systemd/system/firebird-superserver.service
Thêm vào phần [Service]:
LimitCORE=infinity
Khởi động lại các dịch vụ:
systemctl daemon-reload
systemctl restart firebird-superserver.service
Xác minh kích thước dump không giới hạn:
strings /proc/$(pgrep firebird)/limits
3. Cấu hình Vị trí và Đặt Tên Tệp Dump
| Bước này là tùy chọn nhưng được khuyến nghị cao để chỉ định tên tệp dump có ý nghĩa và đảm bảo đủ dung lượng lưu trữ. |
Cấu hình Tạm thời
sysctl -w kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Cấu hình Vĩnh viễn
Thêm vào /etc/sysctl.conf:
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p
Đặt Quyền Sở hữu
chown firebird /path/to/dumps -R
4. Kiểm tra Thu thập Dump
Điều kiện tiên quyết
-
Khởi động lại SSH
-
Xác minh
ulimit -ctrả về “unlimited”
Lệnh Kiểm tra Sự cố
Firebird 3+ (SuperServer hoặc 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
Chế độ Classic
select mon$server_pid from mon$attachments where mon$attachment_id = current_connection;
shell kill -6 <found_PID>;
5. Cài đặt Tệp Debug
| - Tệp debug phải khớp với phiên bản Firebird build của bạn - Cài đặt tệp debug không ảnh hưởng đến hiệu suất - Cập nhật tệp debug khi cập nhật Firebird |
Vị trí tệp debug dự kiế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
| Các bản cài đặt HQbird bao gồm các tệp debug chính xác và tự động xử lý các bản cập nhật. |
6. Tạo Stack Traces từ Các Tiến trình Đang Chạy
- Tạo
gdb-commands.txt:
thread apply all bt
quit
yes
- Tạo stack trace:
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird $(pgrep firebird) 1>./stacktrace.txt 2>&1
7. Tạo Dump từ Tiến trình Đang Chạy
gcore -o /path/to/dumps/firebirdprefix $(pgrep firebird)
| Công cụ sẽ thêm ID tiến trình vào tiền tố. |
8. Tạo Stack Trace từ Dump Hiện có
gdb -q -x ./gdb-commands.txt /opt/firebird/bin/firebird /tmp/core.firebird.23041 1>./stacktrace1.txt 2>&1
9. Phân tích Dump Chuyên sâu
Để phân tích các thư viện dùng chung:
echo -e "info sharedlibrary\nquit\n" | gdb