温馨提示×

为何linux日志占用过大

小樊
36
2026-09-14 14:18:28
栏目: 智能运维

Linux 日志占用过大,通常是由日志产生过多、未轮转、配置不当或异常程序导致的。下面从常见原因到排查方法系统说明。


一、常见原因

1. 日志轮转(logrotate)未生效

  • 服务一直写同一个日志文件
  • logrotate 未配置或配置错误
  • 定时任务被禁用(cron / systemd timer 没跑)

常见于:

  • /var/log/messages
  • /var/log/syslog
  • Nginx / Apache 访问日志

2. 程序异常疯狂写日志

  • 应用报错循环(如 Java 异常栈)
  • 死循环日志
  • 调试日志(debug)未关闭

示例:

ERROR ...
ERROR ...
ERROR ...(每秒几百条)

3. 系统或服务配置问题

  • rsyslog / journald 配置过于详细
  • 开启了 debug 级别日志
  • systemd-journald 未限制大小

4. journal 日志膨胀(非常常见)

/var/log/journal 可能占用十几 GB:

原因:

  • 未设置 SystemMaxUse
  • 系统长期运行、重启少

5. 容器 / Docker 日志

Docker 默认 不限制日志大小:

/var/lib/docker/containers/*/*-json.log

可能单个容器日志几 GB。


6. 被攻击或扫描

  • SSH 暴力破解
  • Web 被扫描
  • 大量失败日志写入

二、快速排查方法

1. 查看哪个目录占用大

du -sh /var/log/*

2. 查看 journal 占用

journalctl --disk-usage

3. 查看大文件

find /var/log -type f -size +100M

4. 查看 Docker 日志

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

三、常见解决方案

1. 清理 journal 日志

journalctl --vacuum-size=500M

或修改:

# /etc/systemd/journald.conf
SystemMaxUse=500M

然后:

systemctl restart systemd-journald

2. 配置 logrotate(示例)

/var/log/nginx/*.log {
    daily
    missingok
    rotate 7
    compress
    delaycompress
    sharedscripts
    postrotate
        systemctl reload nginx
    endscript
}

3. 限制 Docker 日志

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

4. 降低日志级别

  • 应用:关闭 debug
  • rsyslog:避免 *.*
  • Nginx:error_log warn;

四、总结一句话

Linux 日志过大,本质是**“写得太多 + 没轮转 + 没限制”**。

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

  • 系统版本(CentOS / Ubuntu / Debian)
  • 日志路径或截图
  • 是否是服务器 / 容器环境

我可以帮你精准定位并给出配置方案。

0 踩