温馨提示×

为何nginx日志占用高

小樊
48
2026-10-17 06:52:33
栏目: 编程语言

Nginx 日志占用高(磁盘空间或 IO 高)通常是由以下几类原因导致的,你可以对照排查:


一、日志文件本身过大

1. 访问量太大,日志增长快

  • 高并发、爬虫、扫描器、恶意请求频繁访问
  • 未做日志切割,单文件持续增大

表现

  • access.log 几个 GB 甚至几十 GB
  • 磁盘使用率持续上升

解决

  • 开启日志切割(logrotate)
  • 或按天/小时切割:access.log.2026-01-21

2. 记录了不必要的信息

  • 记录了静态资源(js/css/img)
  • 记录了健康检查、监控请求
  • 日志格式过于详细

优化示例

# 不记录静态文件
location ~* \.(js|css|png|jpg|gif)$ {
    access_log off;
}

二、日志写入频繁导致 IO 高

3. 每次请求都写磁盘

  • 高 QPS 下,磁盘 IO 成为瓶颈
  • 特别是云服务器、低配机器

解决

  • 使用缓冲写日志:
access_log /var/log/nginx/access.log main buffer=32k flush=5s;

三、未正确配置日志轮转

4. logrotate 未生效

常见问题:

  • 配置文件缺失
  • nginx 未收到 reload 信号
  • 日志被删除但进程仍持有文件

检查

logrotate -d /etc/logrotate.d/nginx

注意

  • 删除日志后必须:
nginx -s reload

否则磁盘空间不会释放


四、错误日志过多

5. error.log 异常暴涨

常见原因:

  • 后端 502 / 504 大量出现
  • upstream 连接失败
  • 配置错误导致循环或异常

查看

tail -f /var/log/nginx/error.log

五、被攻击或异常流量

6. 被 CC / 扫描 / 爬虫

  • 单 IP 高频访问
  • 大量 404、400 请求

解决

  • 限流
limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
  • 封禁异常 IP
  • 使用 WAF / CDN

六、磁盘或 inode 问题

7. inode 耗尽(小文件太多)

  • 日志切割太频繁
  • 大量零碎日志文件

检查

df -i

快速排查清单

# 查看日志大小
du -sh /var/log/nginx/*

# 查看实时写入
tail -f /var/log/nginx/access.log

# 查看 nginx 进程
ps aux | grep nginx

# 查看磁盘
df -h

如果你愿意,可以贴一下:

  • nginx.conf 日志相关配置
  • du -sh /var/log/nginx/* 结果
  • 是否是 磁盘空间高 还是 IO 高

我可以帮你精准定位并给出优化方案。

0 踩