服务器日志把盘占满了: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 集成服务,可联系贵州诚鑫致达科技,服务范围覆盖贵州全省各市州。西南地区多分支企业:跨区域数据集中存储与统一备份。