Подтвердить что ты не робот

Django с 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

Вы знаете, как решить эти сообщения об ошибках?

4b9b3361

Ответ 1

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

т.е.:

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

Ответ 2

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