限制 journal 占用
journald 会默认把持久化日志的总量控制在磁盘容量的十分之一以内,并预留一定空闲空间。但在系统盘很小的云主机上,这十分之一可能仍然过大;在专门挂了日志盘的机器上,默认值又可能偏小。通过 SystemMaxUse 与 SystemKeepFree 这组参数,可以同时设定上限与保底空间。
基本信息
| 适用平台 | systemd 发行版(journald) |
|---|---|
| 配置文件 | /etc/systemd/journald.conf 及 /etc/systemd/journald.conf.d/ 下的片段 |
| 生效方式 | 修改后重启 systemd-journald 服务 |
| 查看占用 | journalctl --disk-usage |
典型使用场景
- 系统盘容量紧张,需要给日志定一个明确上限
- 日志盘独立挂载,希望提高保留量以便追溯更长时间
- 日常巡检后需要归档日志,先设保留期再执行清理
- 多台机器统一日志策略,避免逐台人工调整
- 排查日志丢失,确认是否被容量限制提前淘汰
配置示例
配置示例
sudo tee /etc/systemd/journald.conf.d/size.conf > /dev/null <<'EOF'
[Journal]
SystemMaxUse=2G
SystemKeepFree=5G
SystemMaxFileSize=100M
MaxRetentionSec=90day
EOF
sudo systemctl restart systemd-journald
journalctl --disk-usage # 复核当前占用
journalctl --vacuum-size=500M # 需要立刻腾空间时手动裁剪校验配置
校验配置
systemd-analyze cat-config systemd/journald.conf | tail -20 # 查看合并后的有效配置
man 5 journald.conf | grep -A3 SystemKeepFree # 核对参数语义
systemctl status systemd-journald --no-pager | head # 确认服务重启成功
journalctl -b -n 20 # 确认日志仍在正常写入参数逐项读法
| 参数 | 含义 | 注意 |
|---|---|---|
| SystemMaxUse | 持久化日志的总量上限 | 与保底空间同时命中时取更严格的一侧 |
| SystemKeepFree | 至少要给文件系统留出的空闲空间 | 防止日志把系统盘写满 |
| SystemMaxFileSize | 单个日志文件的大小上限 | 影响轮转粒度,别设得比总量还大 |
| MaxRetentionSec | 按时间限制日志保留 | 与按容量限制同时生效,先到者先淘汰 |
| RuntimeMaxUse | 内存中日志的占用上限 | 不持久化时也要限制,避免吃掉内存 |
直接改主配置文件会在系统升级时被新版本覆盖,用 conf.d 目录下的片段文件最稳,也便于版本管理。
容量规划思路
- 先统计单位时间产生的日志量,再乘上期望保留天数得到目标上限
- 系统盘要留出明显余量,避免日志挤占系统运行与临时文件所需空间
- 日志盘独立时可以提高保留量,同时把磁盘水位纳入监控
- 用片段文件管理配置,不同环境差异靠各自片段解决
- 定期核对实际占用与配置上限,确认策略没有被改乱
临时腾空间时优先按时间裁剪而不是按容量裁剪,能减少误删近期排查所需日志的风险,裁剪前先确认归档已完成。