如何查找並簡單分析core文件


當系統發生coredump時,通常需要通過分析core文件來定位問題所在,但實際工作中,有時卻發現core 文件找不到,或者core文件被刪除了。

一、core文件沒有生成

KINGBASE core 文件通常是在 $KINGBASE_DATA目錄下。可以使用 coredumpctl list 查找core 文件是否生成 (對於abrtd 服務生成的coredump不會列出):

[kingbase@dbhost03 ~]$ coredumpctl list
No coredumps found.

core文件沒有生成的原因主要有存儲空間不夠、目錄沒有權限、limit設置太小。可以通過ulimit -c 查看limit限制大小。

[root@dbhost03 security]# ulimit -c
unlimited

如果要修改limit,可以修改/etc/security/limits.conf 文件,如:

* soft core unlimited
* hard core unlimited

RedHat7 是通過abrtd服務生成core,如果沒有發現core,可以先確認下abrtd 服務是否啟動。

二、core 文件被截斷原因

1、limit 設置太小

關注兩個標紅的。這兩個值設置過小,可能導致文件被截斷。

復制代碼
[kingbase@dbhost03 tns]$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 18501
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 4096
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
復制代碼

2、修改/etc/systemd/coredump.conf

coredump.conf 文件顯示的都是注釋掉默認值。

復制代碼
[Coredump]
#Storage=external
#Compress=yes
#ProcessSizeMax=2G
#ExternalSizeMax=2G
#JournalSizeMax=767M
#MaxUse=
#KeepFree=
復制代碼
ExternalSizeMax=2G 表示dump 文件最大2G。
修改后需要執行: systemctl daemon-reload

三、Redhat7 core文件

core 文件有兩種方式:abrt or coredump,可以通過以下命令查看:

[root@dbhost03 systemd]# sysctl -n kernel.core_pattern
|/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h

Redhat7 使用abrtd (automatically bug report daemon )服務,core 文件會在/var/spool/abrt/ccpp* 目錄下。默認非root用戶生成core會被系統自動刪除,在messages 日志文件中通常有如下信息:

復制代碼
Jul 24 15:50:22 dbhost03 abrt-hook-ccpp: Process 5070 (kingbase) of user 1001 killed by SIGSEGV - dumping core
Jul 24 15:50:25 dbhost03 abrt-server: Executable '/opt/Kingbase/ES/V8/Server/bin/kingbase' doesn't belong to any package and ProcessUnpackaged is set to 'no'
Jul 24 15:50:25 dbhost03 abrt-server: 'post-create' on '/var/spool/abrt/ccpp-2021-07-24-15:50:22-5070' exited with 1
Jul 24 15:50:25 dbhost03 abrt-server: Deleting problem directory '/var/spool/abrt/ccpp-2021-07-24-15:50:22-5070'
復制代碼

要保留core 不被刪除,需要修改 /etc/abrt/abrt-action-save-package-data.conf  文件,並重啟abrtd服務。

OpenGPGCheck = no
ProcessUnpackaged = yes  

ProcessUnpackaged = yes , 我們自己寫的可執行程序,一般就是拷過去的,不從屬於任何的package(rpm),abrt不生效。為了保證core文件大小,同時還要修改 /etc/abrt/abrt.conf 

# Max size for crash storage [MiB] or 0 for unlimited
#
MaxCrashReportsSize = 1000

三、如何簡單分析core文件

1、確認core文件是哪個程序生成的

2、使用gdb分析core文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM