Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

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

Để xác minh việc xóa:

Code
cat /proc/sys/kernel/core_pattern

Không được có kết quả như:

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

Code
cat /proc/sys/kernel/core_pattern

Nếu bạn thấy kết quả như:

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

Code
service abrtd stop

Đối với CentOS 7:

Code
systemctl disable abrtd.service

Xóa:

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

Code
yum install gdb

Đối với Ubuntu/Debian:

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

Code
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

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

Ubuntu/Debian

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

Thêm vào phần [Service]:

Code
LimitCORE=infinity

Khởi động lại các dịch vụ:

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

Xác minh kích thước dump không giới hạn:

Code
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

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

Code
kernel.core_pattern=/path/to/dumps/core.%e.%t.%p

Đặt Quyền Sở hữu

Code
chown firebird /path/to/dumps -R

4. Kiểm tra Thu thập Dump

Điều kiện tiên quyết

  1. Khởi động lại SSH

  2. Xác minh ulimit -c trả về “unlimited”

Lệnh Kiểm tra Sự cố

Firebird 3+ (SuperServer hoặc 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

Chế độ Classic

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

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

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

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

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

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