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

Django+Gunicorn+Nginx架构下并发请求引发连接重置与502错误的排查求助

Django+Gunicorn+Nginx架构下并发请求引发连接重置与502错误的排查求助

各位大佬好,我最近碰到一个棘手的并发请求问题,折腾了好久都没解决,想请大家帮忙分析下。

我部署了一个作为API端点的Django应用,前端应用在页面加载时会发起大量并发请求(大概80-90个),结果出现了连接重置和502错误,具体情况如下:

遇到的错误信息

  • Nginx作为反向代理,日志里频繁出现:
    kevent() reported that connect() failed (54: Connection reset by peer) while connecting to upstream
    
  • 查看dmesg时发现监听队列溢出的提示:
    Listen queue overflow: 16 already in queue awaiting acceptance (55 occurrences)
    

我已经尝试过的优化措施

  • 调整Gunicorn配置:试过用gevent worker(-k gevent)并把--worker-connections调到1000,也试过用同步worker加--threads参数,但两种方式都没带来明显改善,502还是会出现。
  • 调整系统内核参数:把kern.ipc.somaxconn调到了4096,试图解决监听队列溢出的问题,但依旧没有效果。
  • 压测验证:按照Gunicorn文档用hey做压测,执行命令:
    hey -c 100 -n 200 -H "Authorization: token ${token}" 'https://example.com/api/'
    
    结果状态码分布大概是[200] 126 responses、[502] 74 responses,有时候稍好有时候稍差,但始终有大量502。

相关配置信息

Nginx核心配置

worker_processes  auto;

events {
    worker_connections  1024;
    accept_mutex on;
    use kqueue;
}

upstream backend-api {
    server 127.0.0.1:8000 fail_timeout=0;
}

server {
    listen 443 ssl http2 accept_filter=httpready;
    server_name example.com;

    ssl_certificate /usr/local/etc/nginx/sites/example.com.crt;
    ssl_certificate_key /usr/local/etc/nginx/sites/example.com.key;

    location = /favicon.ico { access_log off; log_not_found off; }
    root /usr/local/www/example.com/web;
    index index.html ;
    keepalive_timeout 5;

    location ~  ^/(static|assets|index.html|$) {
        root /usr/local/www/example.com/web;
    }

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $http_host;
        proxy_set_header X-Real-IP $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_intercept_errors on;
        proxy_pass http://backend-api;
    }
}

Gunicorn启动命令

gunicorn --workers=9 --bind 0.0.0.0:8000 --forwarded-allow-ips='*' -k gevent --worker-connections=1000 api.wsgi

当前困境

不管我怎么调整配置,页面加载时总会有一些502错误,从来没法完全消除。而且奇怪的是,Gunicorn的日志里根本看不到这些失败的请求,说明请求根本没传到Gunicorn这一层就出问题了。

有没有大佬能帮我看看,我到底漏掉了什么配置或者优化点?

备注:内容来源于stack exchange,提问作者Subito

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 15:44:28