应通过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。
CentOS Linux 7.9.2009 CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
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。
