RHEL 8 如何设置将core文件生成在进程当前工作目录
RHEL 7/8 恢复core文件生成到进程当前工作目录的配置方法
RHEL 7开始默认使用systemd-coredump处理程序崩溃转储,默认将core文件统一存到/var/lib/systemd/coredump/路径,修改核心转储规则可按以下步骤操作:
临时验证方案(重启后失效,用于快速验证需求匹配)
- 查看当前核心转储配置:执行命令
cat /proc/sys/kernel/core_pattern,默认输出为管道调用systemd-coredump的格式:|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h - 临时修改core文件生成规则:执行命令
echo "core.%p" > /proc/sys/kernel/core_pattern - 放开当前会话的core文件大小限制:执行命令
ulimit -c unlimited
此时手动触发程序崩溃,即可在进程的当前工作目录下生成core.<pid>格式的转储文件,确认符合需求后可执行以下永久配置步骤。
永久生效配置
1. 修改内核core_pattern全局规则
新增sysctl配置文件/etc/sysctl.d/50-coredump.conf,写入以下内容:
kernel.core_pattern = core.%p kernel.core_uses_pid = 0
执行命令 sysctl -p /etc/sysctl.d/50-coredump.conf 让配置立即生效。
2. 全局放开core文件大小限制
编辑/etc/security/limits.conf,在末尾添加两行配置:
* soft core unlimited * hard core unlimited
3. 适配systemd管理的服务(如果你的程序由systemd托管)
systemd管理的进程默认不继承pam的资源限制,需修改全局systemd配置:
编辑/etc/systemd/system.conf,调整DefaultLimitCORE参数为:
DefaultLimitCORE=infinity
执行命令 systemctl daemon-reexec 让systemd配置生效,之后重启对应业务服务即可。
可选操作:禁用冲突服务
如果系统安装了自动错误报告服务abrtd,该服务会自动修改core_pattern规则,不需要该服务可执行以下命令关闭:
systemctl stop abrtd && systemctl disable abrtd
内容的提问来源于stack exchange,提问作者Mark Warren
相关产品推荐
相关产品推荐

