Джанго с nginx + uwsgi


Я пробую django на nginx + uwsgi. Он работает очень хорошо (быстрее, чем apache mod_wsgi), но если у меня есть более 100 параллельных соединений (т. е.: тестируется с ab-n 100000-c 150 http://localhost:8081/ ), У меня есть сломанная труба на журналах uwsgi:

Nginx.conf:

user  myuser;
worker_processes  8;

events {
    worker_connections  30000;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;
    upstream django {
      ip_hash;
      server unix:/home/myuser/tmp/uwsgi.sock;

    }

    server {
        listen       8081;
        server_name  localhost;
        location / {
            uwsgi_pass  django;
            include     uwsgi_params;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

Uwsgi запускается следующим образом:

/usr/local/bin/uwsgi -s /home/myuser/tmp/uwsgi.sock --pp /home/myuser/projects/django/est/nginx --module django_wsgi -L -l 500 -p 8

И сообщения об ошибках от uwsgi:

writev(): Broken pipe [plugins/python/wsgi_headers.c line 206]
write(): Broken pipe [plugins/python/wsgi_subhandler.c line 235]

Версии: 1.0.6 для nginx и 0.9.9.2 для uwsgi

Знаете ли вы, как решить эти сообщения об ошибках ?

2 12

2 ответа:

Я нашел решение., Проблема не на стороне uwsgi, есть ограничение linux : сокет длиной 128 запросов, поэтому для увеличения очереди ожидания вам нужно настроить ядро:

Ie:

echo 3000 > /proc/sys/net/core/netdev_max_backlog
echo 3000 > /proc/sys/net/core/somaxconn

Соединение 150 для 8 работников с очередью прослушивания 100 может быть слишком большим значением. Вероятно, вам нужно только увеличить очередь прослушивания. Это показано на домашней странице uWSGI (в разделе benchmark)