Gunicorn por trás de Nginx - alto número de TIME_WAIT durante o teste de carga

1

nginx versão: nginx / 1.9.3 gunicorn (versão 19.7.1)

Eu tenho uma pequena API flask correndo através do gunicorn por trás do nginx. Quando eu carrego o teste diretamente através do gunicorn tudo está funcionando bem, no entanto, assim que eu aponto para o nginx, eu recebo um número muito alto de soquetes TIME_WAIT no servidor nginx. Caixa de Gunicorn está bem. Aqui estão as configurações:

Gunicorn:

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

Nginx: blocos relevantes:

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 "";
    }
}

Eu tenho testado e ajustado as configurações, mas não vejo nenhuma alteração na quantidade de soquetes abertos. Eu sei que há várias configurações de SO que são recomendadas para ajustar, como ip_local_port_range e tcp_tw_recycle / tcp_tw_reuse. No entanto, estou trabalhando em um desses ambientes em que tenho que compartilhar o servidor e não posso ajustá-los sem um longo lead time.

Posso fazer alguma coisa no lado nginx / gunicorn? Note que o servidor que executa o gunicorn não está mostrando muitos sockets abertos, o Nginx está esperando algo do gunicorn / flask / api para manter as conexões abertas e reutilizar os sockets existentes?

    
por user2630270 17.05.2017 / 17:10

0 respostas