12

nginx + uwsgiでdjangoを試しています。それは非常にうまく機能します(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]

バージョンは、nginx の場合は 1.0.6、uwsgi の場合は 0.9.9.2 です。

これらのエラー メッセージを解決する方法を知っていますか?

4

2 に答える 2

8

解決策を見つけました。問題は uwsgi 側ではなく、Linux の制限があります。ソケットは 128 リクエストの長さなので、待機キューを拡大するには、カーネルを調整する必要があります。

すなわち:

echo 3000 > /proc/sys/net/core/netdev_max_backlog
echo 3000 > /proc/sys/net/core/somaxconn
于 2011-09-27T08:16:14.833 に答える
3

リッスン キューが 100 の 8 ワーカーの 150 接続は、値が高すぎる可能性があります。おそらく、リッスン キューを増やすだけで済みます。これは、uWSGI ホームページ (ベンチマーク セクションの下) に示されています。

于 2011-09-27T03:39:33.450 に答える