在 Linux 系统中,日志文件过大是常见问题,通常可以通过清理、轮转、限制大小、定位异常等方式处理。下面按常见场景给你一套完整解决方案。
du -sh /var/log/*
或:
du -h --max-depth=1 /var/log
ls -lh /var/log
如果某个日志文件几 GB 且还在增长,先看内容:
tail -f /var/log/syslog
tail -f /var/log/messages
journalctl -f
推荐方式(安全):
truncate -s 0 /var/log/syslog
truncate -s 0 /var/log/messages
或:
> /var/log/syslog
⚠️ 不要直接 rm 日志文件,否则服务可能继续写旧 inode,空间不会释放。
journalctl --disk-usage
# 保留最近 3 天
journalctl --vacuum-time=3d
# 限制最大 500MB
journalctl --vacuum-size=500M
编辑:
sudo vim /etc/systemd/journald.conf
修改:
SystemMaxUse=500M
然后重启:
sudo systemctl restart systemd-journald
Linux 使用 logrotate 自动管理日志。
ls /etc/logrotate.d/
/var/log/myapp.log {
daily
rotate 7
compress
missingok
notifempty
size 100M
create 0640 root root
}
参数说明:
daily:每天轮转rotate 7:保留 7 份compress:压缩旧日志size 100M:超过 100M 才轮转测试配置:
logrotate -d /etc/logrotate.conf
du -sh /var/lib/docker/containers/*
truncate -s 0 /var/lib/docker/containers/*/*-json.log
/etc/docker/daemon.json:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
重启 docker:
systemctl restart docker
如果日志疯狂增长,通常是程序问题:
journalctl -p err -xb
可能是:
lsof +L1
解决:
systemctl restart 对应服务
✅ 快速处理
journalctl --vacuum-size=500Mtruncate -s 0 大日志文件✅ 长期治理
logrotate如果你愿意,可以告诉我:
我可以给你针对性的命令方案。