PTA 翁愷 7-34 求分數序列前N項和
當系統發生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