Skip to content

性能陷阱

Worker 配置

  • worker_processes auto 在容器中可能过多 — 手动限制
  • worker_connections 1024 是每个 worker — 总量 = workers × connections
  • multi_accept on 可能导致某些 worker 饥饿
  • CPU 绑定(worker_cpu_affinity)实际中很少有效

缓冲区

  • client_body_buffer_size 太小 + 大上传 = 写入临时文件
  • 缓冲区静默溢出 — 请求能处理但更慢
  • proxy_buffer_size 需要容纳后端的响应头
  • 大量小缓冲区比少量大缓冲区更浪费内存

Gzip 压缩

  • gzip on 不加 gzip_types = 只压缩 text/html
  • 压缩已压缩文件(jpg、png、zip)= 浪费 CPU 且文件更大
  • gzip_vary on 对 CDN 至关重要 — 没有它 CDN 可能提供错误版本
  • gzip_comp_level 9 很少值得 — 6 是最佳平衡点

缓存

  • proxy_cache 不设 proxy_cache_key 使用默认值,可能冲突
  • 缓存 key 包含 $request_uri 就包含查询字符串 — 缓存可能爆炸
  • proxy_cache_valid 200 1h — 但 301/302 默认永久缓存
  • inactive vs max_size — inactive 按时间清理,max_size 按空间清理

静态文件

  • sendfile on 不加 tcp_nopush on = 没利用内核优化
  • expires 头不加 Cache-Control = 浏览器忽略
  • try_files 带很多路径 = 多次系统调用
  • 符号链接 + disable_symlinks 安全设置可能导致部署失败

日志

  • access_log 默认同步写入 = 每个请求都阻塞 I/O
  • buffer=32k flush=5s 异步日志 — 但崩溃时可能丢失日志
  • 日志轮转不发送 reopen 信号 = nginx 写入已删除的文件
  • JSON 日志可解析但每行更多字节

由云锦鸿维护