服务器日志把盘占满了:journald膨胀的清理与限额

接到过这样的报障吗:服务器磁盘使用率飙到 90% 以上,df -h 看各个目录都不算大,空间却实实在在被吃掉了。这种情况有一类常见根因——systemd 的日志服务 journald 把日志攒得太大。日志是排障的生命线,不能一删了之,正确姿势是"对账—清欠—设限"三步。

为什么是 journald

现在的 Linux 发行版默认用 systemd 管理系统与服务,各服务输出的日志统一收进 journald,以二进制形式存在 /var/log/journal/ 目录。问题在于它默认不设上限或按旧规则滚动:某个服务反复报错刷日志、或调试期日志级别没调回来,几天就能写出几个 G;日志拆分成的多个小文件,单看都不大,合起来把盘顶满——这就是"目录都不大、盘却满了"的来源。

第一步:对账

先确认日志到底占了多少,用 journald 自带的统计命令:

journalctl --disk-usage

它直接给出日志归档的总大小。同时用 df -h 看根分区使用率,两者对上,根因就坐实了。

第二步:清欠

一次性把日志收缩到指定大小,vacuum 参数按需选口径:

journalctl --vacuum-size=500M

也可以按时间清,比如只保留最近两周:

journalctl --vacuum-time=2weeks

清之前如果近期有排障需求,先把关键日志导出一份再执行(journalctl > 文件 导出为文本即可),清欠不可逆,导出是保险绳。

第三步:设限(治本)

清完不设限,过几个月还会再来一遍。编辑配置文件 /etc/systemd/journald.conf,给日志设持久上限:

SystemMaxUse=500M

改完重启日志服务生效:

systemctl restart systemd-journald

这样日志最多占到 500M,到了就自动滚动淘汰旧条目,一劳永逸。有审计要求的单位,把上限配大一些或配合日志外发(rsyslog 转发到集中日志服务器),本地留近期、远端留全量。

顺手的检查习惯

磁盘告警时按这个顺序过一遍:df -h 看分区 → du -xsh /* 2>/dev/null | sort -h 找大户 → 日志类目录进 journalctl --disk-usage 对账 → 清欠+设限。这套组合拳五分钟内能定位绝大多数"盘满"告警,比盲目删除稳得多。

贵州诚鑫致达科技为企业提供 Linux 服务器的日常运维托管,磁盘、日志、备份这类运维底线活,欢迎联系我们统一管起来。

企业存储选型参考|贵州诚鑫致达

做机房存储、虚拟化或监控归档,群晖机型参考:FS6400(全闪存阵列) · SA3610 · SA3410。需要选型建议或上门评估,搜「诚鑫致达」即可找到我们。

服务区域|贵州诚鑫致达

贵州、贵阳及周边市县的企业找群晖 NAS、企业存储、数据备份、信创云盘或 IT 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。西南地区多分支企业:跨区域数据集中存储与统一备份。