Ubuntu18.04与20.04修改配置后仍无法找到core-dump文件怎么办
Ubuntu 18.04/20.04 不生成core dump文件的原因及解决方案
常见故障原因
- ulimit配置仅对当前shell会话生效
你当前执行的ulimit -c unlimited仅在当前打开的终端窗口生效,如果你在其他终端运行崩溃程序、或者程序是通过图形界面/系统服务启动,该配置不会生效。 - /var/crash目录无普通用户写入权限
默认/var/crash目录属主为root,权限仅允许root用户写入,如果你用普通用户身份运行触发段错误的程序,无法在该目录下创建core文件。 - Apport服务未完全禁用,覆盖core_pattern配置
Ubuntu默认的崩溃上报服务Apport会自动修改/proc/sys/kernel/core_pattern,即便你手动修改过,如果Apport服务还在运行,可能会自动恢复原有配置,或者拦截崩溃事件不生成core文件。 - core_pattern修改为临时生效,重启后失效
通过echo直接写入/proc的配置仅临时生效,系统重启后会恢复默认值。 - 特殊程序限制
如果你的程序是SUID/SGID程序、或者程序内部主动调用setrlimit将core文件大小限制为0,也不会生成core dump。
对应解决步骤
- 永久配置ulimit core文件大小限制
编辑/etc/security/limits.conf,在末尾添加以下内容:
* soft core unlimited
保存退出后重新登录系统,配置全局生效。如果是systemd管理的服务,还需要在对应service配置的[Service]段添加LimitCORE=infinity,再重载systemd配置。
2. 修正core dump存储路径权限/更换路径
方案一:给/var/crash目录开放写入权限
sudo chmod 777 /var/crash
方案二:更换为普通用户有权限的存储路径,比如:
sudo su echo "/home/你的用户名/corefiles/core-%e-%p-%t" > /proc/sys/kernel/core_pattern
注意提前手动创建/home/你的用户名/corefiles目录。
3. 禁用Apport服务
sudo systemctl stop apport sudo systemctl disable apport
执行完成后再次确认core_pattern配置是否符合预期:
cat /proc/sys/kernel/core_pattern
- 永久保存core_pattern配置
编辑/etc/sysctl.conf,在末尾添加:
kernel.core_pattern = /var/crash/core-%e-%p-%t
保存后执行sudo sysctl -p立即生效,重启后配置也不会丢失。
5. 验证配置是否生效
编写极简测试程序验证:
// test.c int main() { // 主动触发段错误 *(int *)0 = 0; return 0; }
编译运行:
gcc test.c -o test ./test
如果终端输出Segmentation fault (core dumped),说明配置正常,到你配置的存储路径下就能找到对应core文件。
如果运行的是SUID/SGID程序,还需要执行以下配置:
sudo su echo 2 > /proc/sys/fs/suid_dumpable
要永久生效的话在/etc/sysctl.conf添加fs.suid_dumpable = 2,再执行sudo sysctl -p。
内容的提问来源于stack exchange,提问作者SmartKeyerror
相关产品推荐
相关产品推荐

