You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

压测后Nginx反向代理无响应,单Nginx+Gunicorn容器高并发配置如何设置?

现有配置问题分析

  1. Nginx上游连接无超时与积压限制:没有配置反向代理的超时、重试、队列限制,5000并发请求远超Gunicorn同步worker的处理能力后,请求会无限积压在Nginx的上游连接队列中,僵死连接没有超时回收机制,压测结束后连接池被占满,无法处理新请求。
  2. Gunicorn同步worker处理能力过低:sync类型的worker同一时间只能处理1个请求,8个worker最多同时处理8个请求,压测时会瞬间堵死所有后端入口,间接导致Nginx的代理连接持续占住无法释放。
  3. 系统资源限制未放开:Docker容器默认的文件句柄ulimit限制通常为1024,压测时Nginx需要为每个请求创建连接、打开文件描述符,超过限制后进程会被系统挂起,只能重启恢复。同时你的Nginx配置只写了worker_connections 20000,没有配套配置worker_rlimit_nofile放开进程文件句柄限制,实际可用连接数远低于配置值。
  4. 长连接复用缺失:Nginx到Gunicorn默认使用短连接,高并发下会产生大量TIME_WAIT状态的连接,占满容器的可用端口后无法建立新连接。
  5. accept_mutex配置不合理:高并发场景下开启accept_mutex会导致多worker进程争抢接收锁,额外增加性能开销,严重时会导致worker进程假死。

单容器架构高并发配置优化

1. Nginx配置修改

# 全局段新增,放开进程文件句柄限制
worker_processes  auto; # 自动匹配CPU核心数,不需要手动写8
worker_rlimit_nofile 65535;

user nobody nogroup;
error_log /dev/stdout warn; # 压测时info级日志会拖慢性能,建议改成warn
pid /var/run/nginx.pid;
    
events {
  worker_connections 20000;
  accept_mutex off; # 高并发场景关闭,降低锁开销
  use epoll; # 新增,使用高性能IO模型
}
    
http {
  include mime.types;
  default_type application/octet-stream;
  access_log /var/log/nginx/access.log combined buffer=16k; # 新增缓存,减少磁盘IO
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;

  # 新增上游服务配置,支持长连接复用
  upstream gunicorn {
    server flask-container:8000 max_fails=3 fail_timeout=30s;
    keepalive 64; # 保留64个复用长连接
  }

  # 新增全局代理配置
  proxy_connect_timeout 3s;
  proxy_send_timeout 5s;
  proxy_read_timeout 5s;
  proxy_buffering on;
  proxy_buffer_size 4k;
  proxy_buffers 8 4k;
  proxy_max_temp_file_size 0;
  proxy_next_upstream error timeout invalid_header http_502 http_503 http_504;
  proxy_next_upstream_tries 1; # 失败不重试,避免加重后端压力
  proxy_http_version 1.1;
  proxy_set_header Connection "";

  # 可选:全局并发限制,超过直接返回503,避免无限积压
  limit_conn_zone $server_name zone=perserver:10m;

  server {
    listen 80 default_server;
    return 444;
  }

  server {
    listen 80;
    client_max_body_size 4G;
    server_name localhost;
    keepalive_timeout 5;
    root /path/to/app/current/public;

    # 新增并发限制,根据后端处理能力调整数值
    limit_conn perserver 1000;

    location / {
      try_files $uri @proxy_to_app;
    }

    location @proxy_to_app {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://gunicorn; # 修改为上游服务名
    }

    error_page 500 502 503 504 /500.html;
    location = /500.html {
      root /path/to/app/current/public;
    }
  }
}

2. Gunicorn配置修改

首先安装gevent依赖:pip install gevent
然后修改配置:

bind = '0.0.0.0:8000'
workers = 13 # 6核CPU建议用 核心数*2 +1 的规则配置
worker_class = 'gevent' # 替换sync为异步worker,单worker可处理上千并发
worker_connections = 1000 # 单worker最大连接数
loglevel = 'warn'
preload_app = true
timeout = 3 # 和Nginx超时对齐
keepalive = 60 # 支持长连接复用

3. Docker运行参数调整

启动容器时新增ulimit配置,放开文件句柄限制:

# Nginx容器启动命令新增参数
docker run --ulimit nofile=65535:65535 其他参数 nginx:latest

# Gunicorn容器启动命令新增参数
docker run --ulimit nofile=65535:65535 其他参数 你的镜像名

内容的提问来源于stack exchange,提问作者Exz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:48:00