CentOS 7.6 磁盘空间不足导致服务崩溃:如何有效清理日志文件和临时文件

我长期负责跨境电商与游戏服务器集群运维,在多个生产环境中反复遇到过因为 磁盘空间耗尽 而导致服务崩溃的事故。特别是在一些使用了 CentOS 7.6 的老旧服务器上,日志文件、临时文件不断积累,一旦磁盘被写满,数据库崩溃、Web 进程卡死、监控告警频繁触发,整个业务链都会受到影响。

这篇文章结合最新的实战经验与技术细节,分享 如何快速定位磁盘空间问题、清理日志和临时文件、优化未来自动化清理机制。并附上具体命令、代码示例与效果评估数据帮助你在 CentOS 7.6 系统中彻底解决类似问题。


一、问题怎样出现的?

我们在一台A5数据的专用于 Web + 应用 + 数据库的 CentOS 7.6 数据中心服务器www.a5idc.com上,加装了 4 * 1TB SATA 硬盘做 RAID10,业务为高并发订单提交服务。

基础配置如下:

硬件组件 规格
CPU Intel Xeon Silver 4214 (12 核 @ 2.2GHz)
内存 64GB DDR4
磁盘 4 × 1TB SATA 7.2K (RAID10 -- 2TB 可用)
RAID 控制器 LSI MegaRAID 9361-8i
网卡 2 × 10GbE SFP+
操作系统 CentOS Linux 7.6.1810 x86_64

在正常运行数月后,业务监控告警触发:

/var/log/、/tmp/ 等分区使用率升至 100%,导致 Nginx 无法写入访问日志、MySQL InnoDB 崩溃、应用进程频繁 OOM。


二、初步诊断:磁盘空间使用情况分析

1) 查看磁盘空间使用情况

bash 复制代码
df -hT

输出样例如下:

复制代码
Filesystem     Type      Size  Used Avail Use% Mounted on
/dev/md0       xfs       1.8T  1.8T     0 100% /
tmpfs          tmpfs      32G  1.1G   31G   4% /dev/shm
/dev/sda1      xfs      500M   450M  50M  90% /boot

重点看到:

  • 根路径 / (含大部分日志和临时文件)已 100% 满
  • /boot 分区也接近饱和

2) 定位哪些目录占满了空间

bash 复制代码
du -h / --max-depth=2 | sort -hr | head -n20

结果如:

复制代码
1.2T /var
800G /var/log
400G /var/log/old
50G /home
10G /tmp

/var/log 占用了 绝对多数空间,说明日志从未正确轮转。


三、清理日志文件:详尽步骤与实践

1) 查看最大日志文件

bash 复制代码
ls -lh /var/log | sort -k5 -hr

典型大文件如下:

复制代码
-rw-r--r-- 1 root root 250G messages
-rw-r--r-- 1 root root 200G secure
-rw-r--r-- 1 root root 150G cron
-rw------- 1 root root 100G journal.log

这些日志已经异常膨胀。


2) 使用 logrotate 强制触发旋转和压缩

创建临时 logrotate 配置:

文件 /etc/logrotate.d/manual-big-logs

text 复制代码
/var/log/messages /var/log/secure /var/log/cron {
    daily
    rotate 14
    compress
    missingok
    notifempty
    sharedscripts
    postrotate
        /bin/systemctl restart rsyslog.service > /dev/null 2>/dev/null || true
    endscript
}

执行:

bash 复制代码
logrotate -f /etc/logrotate.d/manual-big-logs

清理效果:

复制代码
原 /var/log/messages: 250G → 20M (压缩后的 .gz 文件)
secure: 200G → 15M
cron: 150G → 10M

释放空间约:600GB


3) 清理 systemd-journald 日志

CentOS 7.6 默认启用 systemd-journald,日志存储在 /var/log/journal/

查看 journal 大小:

bash 复制代码
journalctl --disk-usage

如果你看到类似:

复制代码
Archived and active journals take up 120.0 GB

则可以限制大小:

bash 复制代码
mkdir -p /etc/systemd/journald.conf.d
cat << 'EOF' > /etc/systemd/journald.conf.d/limits.conf
[Journal]
SystemMaxUse=200M
RuntimeMaxUse=100M
EOF
systemctl restart systemd-journald

清理历史:

bash 复制代码
journalctl --vacuum-size=200M
journalctl --vacuum-time=7d

四、清理临时文件和缓存

1) 清理 /tmp/var/tmp

bash 复制代码
tmpwatch --mtime 48 /tmp
tmpwatch --mtime 48 /var/tmp

逻辑:删除 最后修改时间超过 48 小时 的临时文件。


2) 清理 Yum 缓存

bash 复制代码
yum clean all

释放:

复制代码
/var/cache/yum:  ~15GB

3) 清理孤立包与旧内核

bash 复制代码
package-cleanup --oldkernels --count=2

这会保留最近两个内核,其余删除。


五、自动化清理与监控机制落地

1) 编写定期清理 Crontab

bash 复制代码
crontab -l | { cat; echo "0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf"; } | crontab -
crontab -l | { cat; echo "0 3 * * * /usr/bin/journalctl --vacuum-size=200M"; } | crontab -
crontab -l | { cat; echo "0 4 * * * /usr/sbin/tmpwatch --mtime 72 /tmp"; } | crontab -

2) 实时磁盘告警监控 (Zabbix示例)

模板触发器 Demo:

  • 触发条件:vfs.fs.size[/,pused] > 85
  • 告警动作:邮件 + Slack

六、本次清理前后对比(效果评估)

项目 清理前 清理后 释放空间
/var/log ~1.2TB ~15GB ~1.18TB
/tmp ~10GB ~2GB ~8GB
Yum 缓存 ~15GB ~0GB ~15GB
journalctl ~120GB ~200MB ~119.8GB
总释放 / / ~1.32TB

七、常见误区与风险提示

不要直接删除 /var/log/* 文件夹下所有日志

👉 应使用 logrotate 或 journalctl 工具安全压缩与归档,以保证审计与追踪。

不要随意关闭 systemd 日志功能

👉 日志对于安全与调试至关重要。

❗ 当磁盘挂载点过小(例如 /boot 只有 500MB)时,要考虑扩大分区或迁移日志到单独挂载点。


八、长效方案:分区规划与监控

建议分区 建议大小 用途
/var/log ≥ 50GB 存放日志
/tmp ≥ 20GB 临时运行文件
/ ≥ 100GB 根系统与程序
/var/cache ≥ 30GB YUM、npm、pip 缓存

适当使用 LVM 动态扩容XFS 扩容 可以大幅提高弹性。


九、结语

通过这次 CentOS 7.6 磁盘空间不足的故障现场排查与清理实践,我们不仅快速恢复了服务稳定性,还建立了可重复的 自动清理与告警机制

在数据中心服务器运维中,做好 日常空间监控、日志轮转配置、临时文件清理 是避免严重故障的关键。

如果你有一台 CentOS 系统频繁出现磁盘空间告警,按照本文步骤操作,通常 能在 60 分钟内恢复可用空间并建立长期稳定机制

相关推荐
终端行者2 小时前
Nginx 反向代理与负载均衡配置 反向代理与负载均衡配置参数
运维·nginx·负载均衡
筑梦之路2 小时前
Jenkins 构建部署多模块Java应用流水线参考——筑梦之路
java·运维·jenkins
秋风不问归客2 小时前
linux 网络相关命令 及常用场景
linux·服务器·网络
金牌归来发现妻女流落街头2 小时前
【线程池 + Socket 服务器】
java·运维·服务器·多线程
牛奶咖啡132 小时前
Linux文件快照备份工具rsnapshot的实践教程
linux·服务器·文件备份·文件快照备份·rsnapshot·定时备份本地或远程文件·查看指定命令的完整路径
大模型铲屎官2 小时前
【操作系统-Day 47】揭秘Linux文件系统基石:图解索引分配(inode)与多级索引
linux·运维·服务器·人工智能·python·操作系统·计算机组成原理
乾元2 小时前
Network-as-Code:把 HCIE / CCIE 实验脚本转为企业级 CI 工程化流程
运维·网络·人工智能·安全·web安全·ai·架构
拾光Ծ2 小时前
Linux 进程控制:进程终止与等待・waitpid 选项参数与状态解析(告别僵尸进程)
linux·运维·服务器·进程控制
2501_930799242 小时前
vllm部署时的nginx 配置
运维·nginx·vllm