Coredump核心转储是在程序崩溃时生成的内存镜像文件,用于调试,但在生产环境中通常会禁用以避免磁盘空间占用和安全风险。
下面的方法,可以完全禁止掉Coredump功能
1. bash ulimit软硬限制core为0
ulimit -c 0 # 当前shell会话中禁用core dump ulimit -S -c 0 # 仅设置软限制 ulimit -H -c 0 # 设置硬限制(需要root权限)
作用:对当前shell及后续进程禁用核心转储。
永久生效:需要将
ulimit -c 0添加到~/.bashrc或/etc/profile中。
2. csh limit软硬限制core为0
limit coredumpsize 0
注意:一定是CSH模式下才有limit命令
作用:在C shell中禁用核心转储。
永久生效:添加到
~/.cshrc或/etc/csh.cshrc。
3. systemctl disable abrtd --now
systemctl disable abrtd --now
作用:
abrtd(Automatic Bug Reporting Tool)是收集崩溃报告的服务。disable禁止开机自启,--now立即停止服务。注意:在RHEL/CentOS/Fedora中常见,禁用后不会自动收集崩溃报告。
4. kernel.core_pattern = |/bin/false
echo "kernel.core_pattern = |/bin/false" >> /etc/sysctl.conf sysctl -p
作用:
core_pattern定义core文件的生成方式,|/bin/false表示将core数据通过管道传递给/bin/false(立即丢弃)。这是全局生效的,优先级高于ulimit。
注意:使用
|/bin/false或|/usr/bin/logger -t core_dump(仅记录日志)是常见做法。
5. systemd-coredump配置
# /etc/systemd/coredump.conf [Coredump] Storage=none
systemctl daemon-reexec
作用:
配置systemd不存储核心转储文件(
Storage=none)。daemon-reexec重新加载systemd管理器配置。注意:此配置仅影响由systemd管理的服务,不影响用户会话。
验证是否生效
# 检查core_pattern sysctl kernel.core_pattern # 检查当前shell的core限制 ulimit -c # 测试生成core(应失败) sleep 10 & kill -SIGSEGV $! # 触发段错误 ls core* 2>/dev/null || echo "No core dump generated"
注意事项
权限要求:除ulimit用户级设置外,其他操作均需root权限。
安全影响:禁用core dump可能增加故障排查难度,建议在测试环境保留调试能力。
优先级:
kernel.core_pattern的设置会覆盖ulimit的限制。系统差异:不同发行版可能使用不同的崩溃收集工具(如Ubuntu用apport)。
如果需要临时启用core dump进行调试,可以:
ulimit -c unlimited sysctl -w kernel.core_pattern=core.%p


网友留言: