温馨提示×

Linux日志太大怎么处理

小樊
83
2026-07-07 03:57:01
栏目: 智能运维

在 Linux 系统中,日志文件过大是常见问题,通常可以通过清理、轮转、限制大小、定位异常等方式处理。下面按常见场景给你一套完整解决方案。


一、先确认日志大的原因(很重要)

1️⃣ 查看哪些日志占用空间最多

du -sh /var/log/*

或:

du -h --max-depth=1 /var/log

2️⃣ 查看实时增长日志

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 清理 systemd 日志(非常常见)

查看当前 journal 日志大小

journalctl --disk-usage

清理旧日志

# 保留最近 3 天
journalctl --vacuum-time=3d

# 限制最大 500MB
journalctl --vacuum-size=500M

永久限制 journal 日志大小

编辑:

sudo vim /etc/systemd/journald.conf

修改:

SystemMaxUse=500M

然后重启:

sudo systemctl restart systemd-journald

四、配置日志轮转(最重要,长期方案)

Linux 使用 logrotate 自动管理日志。

查看已有配置

ls /etc/logrotate.d/

示例:限制 /var/log/myapp.log

/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

五、Docker / 容器日志过大(非常常见)

查看 docker 日志大小

du -sh /var/lib/docker/containers/*

清理某个容器日志

truncate -s 0 /var/lib/docker/containers/*/*-json.log

永久限制 docker 日志

/etc/docker/daemon.json

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}

重启 docker:

systemctl restart docker

六、常见异常日志原因排查

如果日志疯狂增长,通常是程序问题:

1️⃣ 查看报错服务

journalctl -p err -xb

2️⃣ 常见原因

  • 程序死循环打日志
  • 服务不断重启
  • 磁盘满导致日志刷屏
  • cron 任务异常
  • 网络 / 权限错误反复重试

七、磁盘满了但日志不大?

可能是:

  • 被删除但仍被进程占用
lsof +L1

解决:

systemctl restart 对应服务

八、推荐处理顺序(总结)

快速处理

  1. journalctl --vacuum-size=500M
  2. truncate -s 0 大日志文件

长期治理

  1. 配置 logrotate
  2. 限制 journal 日志大小
  3. 限制 docker 日志
  4. 排查日志异常增长原因

如果你愿意,可以告诉我:

  • 是哪台服务器(物理机 / docker / k8s)
  • 哪个日志特别大
  • 系统版本(CentOS / Ubuntu / Debian)

我可以给你针对性的命令方案

0