Nginx 背后的 Gunicorn - 负载测试期间 TIME_WAIT 数量较高

Nginx 背后的 Gunicorn - 负载测试期间 TIME_WAIT 数量较高

nginx版本:nginx/1.9.3 gunicorn(版本19.7.1)

我在 nginx 后面的 gunicorn 中运行了一个小型 flask API。当我直接通过 gunicorn 进行加载测试时,一切都运行良好,但是一旦我将其指向 nginx,我就会得到 nginx 服务器上非常多的 TIME_WAIT 套接字。Gunicorn 盒子很好。以下是配置:

古尼康:

bind = '0.0.0.0:7030'
workers = 10
threads = 1
daemon = True
DEBUG = "True"

Nginx:相关块:

upstream api {
    keepalive 32;
    server box1:7030;
    server box2:7030;
}


server {
    listen       7077;

    server_name  localhost;

    proxy_set_header   Host $host;
    proxy_set_header   X-Real-IP $remote_addr;
    proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header   X-Forwarded-Host $server_name;

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout  1;

    location / {
        proxy_next_upstream     error timeout http_500 http_404 http_502;
        proxy_pass              http://api;
        proxy_http_version 1.1;
        proxy_set_header Connection "";
    }
}

我一直在测试和调整配置,但我没有看到打开的套接字数量有任何变化。我知道有几个操作系统设置建议调整,例如 ip_local_port_range 和 tcp_tw_recycle / tcp_tw_reuse,但是我在其中一个必须共享服务器的环境中工作,如果没有很长的准备时间,我无法调整这些设置。

我可以在 nginx / gunicorn 端做任何事情吗?请注意,运行 gunicorn 的服务器根本没有显示很多打开的套接字,Nginx 是否希望 gunicorn/flask/api 保持连接打开并重用现有套接字?

相关内容