默认是执行文件的路径,要确保空间足够(至少8G)
已经按教程how_to_handle_crash.md · 浙江智臾科技有限公司/Tutorials_CN - Gitee.com 第3.1节开启了core文件。
[tester@cnserver5 ~]$ ulimit -c unlimited
[tester@cnserver5 ~]$ cat/proc/sys/kernel/core_pattern |/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I %h
程序提示了Segmentation fault (core dumped),但是没有找到core文件,这个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服务。
需要配置的abrtd相关的配置文件,路径,配置项如下:
配置文件
需要修改的配置文件里的项
修改值
含义
/etc/abrt/abrt.conf
MaxCrashReportsSize
0
不限制core文件大小
DumpLocation
/xxx/xxx
core文件生成路径
/etc/abrt/abrt-action-save-package-data.conf
ProcessUnpackaged
1
允许捕获未打包的程序,若不配置core不会生成
完整操作步骤如下:
打开abrtd配置文件 /etc/abrt/abrt-action-save-package-data.conf。
找到以下行:
ProcessUnpackaged = 0 (可能是ProcessUnpackaged = no)
3. 将0更改为1:
ProcessUnpackaged = 1
4. 保存并关闭文件。
5.打开abrtd配置文件 /etc/abrt/abrt.conf
6. 找到以下配置项:
MaxCrashReportsSize
7.修改MaxCrashReportsSize为0
8.找到以下配置项
DumpLocation
9. 修改为coredump路径(注意这个路径空间得够,至少比maxMemSize大,不配置则默认为/var/spool/abrt)
10. 重新启动abrtd服务:
sudo systemctl restart abrtd.service
11. 测试是否能够生成coredump
sleep 100 &
kill -11 <上一个命令返回的进程id>
查看coredump路径下是否生成