journalctl --vacuum-size 是刚性熔断操作,立即强制将日志压缩至指定大小(如100M),不依赖配置、时间或轮转,仅依据当前磁盘占用实时削峰,是磁盘告急时最直接有效的止血手段。

用 journalctl --vacuum-size 做刚性熔断,本质是“强制截流”,不是设置上限,而是立即削峰。它不依赖配置、不等待轮转、不看时间,只认当前磁盘占用——只要执行,就硬生生把日志总量压到你指定的大小(比如100M),哪怕只剩最新几小时的日志也照删不误。这是磁盘告急时最直接、最安全、最有效的止血操作。
第一步:确认爆满是否真由 journal 日志引起
别一上来就删,先锁定“真凶”:
- 运行 journalctl --disk-usage —— 若显示类似 “Archived and active journals take up 8.2G”,说明 journal 已落盘且严重超标;
- 若提示 “No journal files were found.”,说明日志还在内存(/run/log/journal),重启即可清空,无需 vacuum;
- 补查 ls /var/log/journal/:若有非空子目录(如以机器 ID 命名的文件夹),即为持久化日志,必须处理。
第二步:用 --vacuum-size 立即熔断(核心动作)
这是“刚性”所在:命令一执行,journald 自动压缩、归档、删除旧条目,原子完成,不中断服务写入:
- sudo journalctl --vacuum-size=100M:只保留最新、最紧凑的 100MB 日志(自动剔除最旧归档,保留索引完整);
- 可叠加更严限制:sudo journalctl --vacuum-size=100M --vacuum-time=3d,journald 会取两者中更苛刻的结果(例如实际只留够 100MB 的最近 3 天日志);
- 执行后立刻再跑 journalctl --disk-usage 验证,输出应显著下降(如从 8G → 95M)。
第三步:防止熔断反复触发(补上永久约束)
真空命令只是救火,不改配置,几小时后日志又会暴涨。必须同步启用 journald 的主动限流能力:
- 编辑 /etc/systemd/journald.conf,取消注释并设值:
- SystemMaxUse=100M:硬性封顶 /var/log/journal 总用量;
- MaxFileSec=3day:单个日志文件最多存 3 天,避免单点膨胀;
- SystemMaxFileSize=20M(推荐):防止单文件过大拖慢 vacuum 效率;
- 保存后执行 sudo systemctl restart systemd-journald,配置即时生效。
第四步:加一道定时保险(应对异常场景)
即使配置了 SystemMaxUse,journald 在 I/O 卡顿、进程异常时仍可能短暂超限。建议每小时兜底一次:
- 新建脚本 /root/bin/journal-melt.sh:
- #!/bin/bash
journalctl --vacuum-size=100M > /dev/null 2>&1 - 添加定时任务:0 * * * * /root/bin/journal-melt.sh(crontab -e 中添加);
- 该脚本不报错、不输出、不干扰,纯粹做“守门人”,确保日志体积永不越界。










