应通过ulimit限制单进程core大小、重定向core_pattern至独立分区、启用磁盘配额、部署定时清理脚本及配置systemd-coredump全局策略五步协同管控;其中ulimit -c 204800设100mb上限,/proc/sys/kernel/core_pattern重定向路径,/etc/fstab添加usrquota,grpquota启配额,crontab每两小时清理超5个旧core,/etc/systemd/coredump.conf设maxuse=500m等参数。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

如果您在Linux系统中部署核心转储(core dump)功能,但发现大量core文件持续写入导致磁盘空间耗尽,则可能是由于未对core文件的生成行为施加容量约束。以下是限制Core日志文件大小、防止磁盘溢出的具体操作步骤:
一、通过ulimit限制单进程core文件大小
ulimit -c 是内核检查core生成与否及大小的唯一决定因素,其值直接控制是否写入以及最大可写入块数(单位为512字节)。该限制作用于shell会话及其子进程,是进程级最基础且强制生效的控制手段。
1、查看当前限制:执行 ulimit -c,若输出为0则表示禁用core生成。
2、临时设置为100MB:执行 ulimit -c 204800(100×1024×1024 ÷ 512 = 204800)。
3、永久生效:向 /etc/security/limits.conf 中添加两行:
* soft core 204800
* hard core 204800
修改后需重新登录或重启systemd服务以继承新限制。
二、配置core_pattern重定向并绑定独立分区
/proc/sys/kernel/core_pattern 决定core文件的保存路径与命名格式,不控制是否生成或大小,但可将其导向具备配额或空间隔离能力的专用挂载点,从而间接实现磁盘占用管控。
1、创建专用目录并挂载独立小分区(如/dev/sdb1)至 /var/coredump,确保该分区仅用于core存储。
2、设置目录权限:执行 chmod 700 /var/coredump && chown root:root /var/coredump。
3、配置core_pattern:执行 echo "/var/coredump/core.%e.%p.%t" | sudo tee /proc/sys/kernel/core_pattern。
4、永久化:在 /etc/sysctl.conf 中追加 kernel.core_pattern = /var/coredump/core.%e.%p.%t,并运行 sudo sysctl -p 加载。
三、在专用分区上启用磁盘配额控制用户级core写入
当core文件统一写入 /var/coredump 所在分区时,可通过磁盘配额机制限制特定用户在此分区上的总空间使用量,防止单个用户崩溃频发导致分区填满。
1、编辑 /etc/fstab,为该分区添加 usrquota,grpquota 挂载选项。
2、重新挂载分区:执行 mount -o remount /var/coredump。
3、生成配额数据库:执行 quotacheck -ugcv /var/coredump。
4、对用户jc设置硬限制1GB:执行 setquota -u jc 1048576 1048576 0 0 /var/coredump(单位为KB)。
5、启用配额:执行 quotaon -ugv /var/coredump。
四、部署定时清理脚本限制core文件数量与生命周期
即使设置了大小和路径,仍可能因服务长期运行积累过多历史core文件。需通过定时任务控制保留数量,避免旧文件滞留占用空间。
1、创建清理脚本 /usr/local/bin/cleanup_core.sh,内容为:
cd /var/coredump || exit
core_files_count=$(ls -1t 2>/dev/null | wc -l)
max_files=5
if [ "$core_files_count" -gt "$max_files" ]; then
ls -1t | tail -n $((core_files_count - max_files)) | xargs -I {} rm -f {}
fi
2、赋予执行权限:执行 chmod +x /usr/local/bin/cleanup_core.sh。
3、添加crontab任务:执行 echo "0 */2 * * * /usr/local/bin/cleanup_core.sh" | sudo crontab -u root -,每两小时运行一次。
五、使用systemd-coredump配合全局大小策略
systemd-coredump作为现代Linux发行版默认core处理机制,支持在用户态统一压缩、限大小、符号分离,并可通过配置文件实施全系统级容量约束,替代原始内核dump行为。
1、确认已启用:执行 systemctl is-active systemd-coredump.socket,应返回 active。
2、编辑配置文件 /etc/systemd/coredump.conf,设置以下参数:
Storage=external
MaxUse=500M
KeepFree=200M
ProcessSizeMax=100M
3、重载配置:执行 sudo systemctl daemon-reload 并重启服务:sudo systemctl restart systemd-coredump。











