# journald 日志过大: 查看并限制日志大小

在许多 Linux 服务器上,systemd 日志会慢慢增长,成为 /var 中最大的内容。你可以查看它的大小、一次性精简它,并设置上限让它保持较小——全程无需改动其他日志文件。

## 1. 查看日志占用了多少空间

运行 journalctl --disk-usage。它会显示已归档和活动日志文件的总大小。这些文件通常位于 /var/log/journal(持久化)或 /run/log/journal(仅保存在内存中)。
如果 /var/log/journal 目录不存在,系统可能仅将日志保存在内存中,此时你看到的大小受限于内存,而不是磁盘。

## 2. 一次性精简

要让日志保持在某个大小以内,请运行 sudo journalctl --vacuum-size=500M。若只想保留最近的记录,请运行 sudo journalctl --vacuum-time=14d。这两条命令都会删除旧的已归档日志文件,其中的日志之后无法恢复。
再次运行 journalctl --disk-usage 进行确认。清理操作会删除整个已归档文件,因此结果可能略高于或略低于目标值。

## 3. 设置永久限制

打开 /etc/systemd/journald.conf(或在 /etc/systemd/journald.conf.d/ 中创建一个附加配置文件),在 [Journal] 段下设置 SystemMaxUse=500M。如果还想保留一些可用空间,也可以使用 SystemKeepFree=1G。SystemMaxUse 限制持久化日志;RuntimeMaxUse 对内存中的日志起相同作用。
使用 sudo systemctl restart systemd-journald 使其生效,然后过一段时间再查看 journalctl --disk-usage。

## 4. 决定需要保留什么

日志越小,可用于调试的历史记录就越短。如果需要保留某个服务更长时间的历史记录,请将其日志转发到其他位置,而不是全部保存在服务器上。
看看哪个服务写入最多:journalctl -b -p warning --no-pager | tail 会显示最近的警告,而每分钟记录数千行日志的服务值得从源头上修复。

## FAQ

**运行 journalctl --vacuum-size 安全吗?**

对系统本身来说是安全的:它只会删除旧的已归档日志文件。但你会丢失这些日志历史,因此请先确认调查时不再需要它们。

**编辑 journald.conf 后需要重启什么吗?**

重启 systemd-journald(sudo systemctl restart systemd-journald)。此后限制即会生效,较旧的文件会在日志轮转时被精简。

**为什么 /var/log/journal 不存在?**

持久化存储已关闭,或设置为 auto 但目录不存在。此时日志位于内存中的 /run/log/journal,重启后会丢失。仅在需要持久化时才创建 /var/log/journal 并重启 journald。

Source: https://raincleaner.eu/zh/guides/journald-logs-too-big-limit-journal-size