跳转到主内容
极星编程网:以代码为星,赴技术山海!

Linux部署Core磁盘配额_限制Core日志文件大小防止溢出

应通过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。

相关文章