VPS 磁盘占用莫名上涨?我是这样把 Debian 11 的 journal 日志限制住的

最近排查一台新加坡节点的小 VPS,发现硬盘占用总是在慢慢往上爬。WordPress 文章、媒体库、MySQL binlog 都排除之后,最后锁定了一个很容易被忽视的来源:systemd 的 journal 日志

这类日志不是博客内容,也不是 AMH 面板自己的日志,而是 Debian 系统层的运行日志。像 SSH 登录尝试、定时任务、服务状态变化,都会被写进去。如果服务器挂在公网,日志增长速度往往比想象中快。

我这台机器一开始查到的结果是:

journalctl --disk-usage

输出显示:

Archived and active journals take up 440.0M in the file system.

对于一台 40G 硬盘的小 VPS 来说,440M 已经没必要了。解决思路也不复杂:给 journald 设置上限,再把旧日志压缩回收。

journal 是什么

先简单说一句,避免混淆。

  • amh-access.log、nginx access.log 这类,是面板或网站自己的日志
  • journal 是 Debian 系统自己的总日志池,由 systemd-journald 管理

它通常会记录这些内容:

  • SSH 登录和爆破尝试
  • CRON 定时任务
  • 服务启动、重启、报错
  • 内核和系统消息

所以你在 auth.log 里看到一堆 Invalid user admin、Invalid user ubuntu 的同时,journal 里通常也会同步增长。

修改 journald 限制大小

直接编辑配置文件:

nano /etc/systemd/journald.conf

在 [Journal] 下面加入这几行:

[Journal]
SystemMaxUse=80M
RuntimeMaxUse=30M
SystemMaxFileSize=20M
MaxRetentionSec=7day

这几个参数的意思很直白:

  • SystemMaxUse=80M:磁盘上的 journal 总占用尽量控制在 80M 左右
  • RuntimeMaxUse=30M:运行时日志占用控制在 30M
  • SystemMaxFileSize=20M:单个日志文件不要太大
  • MaxRetentionSec=7day:最多保留 7 天

这套数值对小内存、小硬盘的 VPS 比较合适。不是绝对标准,但足够实用。

让配置生效

保存后执行:

systemctl restart systemd-journald

然后把旧日志清理到目标范围:

journalctl --vacuum-size=80M

如果想更激进一点,也可以改成:

journalctl --vacuum-size=50M

检查结果

执行:

journalctl --disk-usage

我这台机器处理完后的结果是:

Archived and active journals take up 96.0M in the file system.

虽然不是精确等于 80M,但这是正常现象。SystemMaxUse 更像一个控制目标,不是硬切到一字不差。只要从几百 MB 降下来了,而且后续不再无限增长,目的就达到了。

再顺手确认一下配置是否写进去了:

grep -Ev '^\s*#|^\s*$' /etc/systemd/journald.conf

如果输出类似下面这样,就说明已经生效:

[Journal]
SystemMaxUse=80M
RuntimeMaxUse=30M
SystemMaxFileSize=20M
MaxRetentionSec=7day

这一步能解决什么问题

限制 journal 后,至少能解决两件事:

第一,系统日志不再无上限吃盘

第二,后面再排查磁盘占用时,能把注意力放回真正异常的目录,而不是一直被系统日志干扰。

不过也要说清楚:限制 journal 只是收口,不是治本。

如果你的服务器像我这台一样,公网不断有人扫 SSH 端口,那 auth.log 和 journal 还是会继续写,只是不会再失控。所以更彻底的做法,通常还包括:

  • 修改 SSH 默认端口
  • 禁止密码登录
  • 只允许密钥登录
  • 安装 fail2ban

最后

如果你也在用 Debian 11 或类似的 systemd 系统,发现 VPS 磁盘占用总是缓慢上涨,先别急着怀疑网站内容或者数据库。

先看一眼:

journalctl --disk-usage

很多时候,问题就藏在这里。

订阅评论
提醒

0 评论
内联反馈
查看所有评论