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]

版本是:1.0.6 用于 nginx,0.9.9.2 用于 uwsgi

你知道如何解决这些错误信息吗?

4

2 回答 2

8

我找到了解决方案,问题不在uwsgi方面,有一个linux限制:socket是128个请求长,所以要扩大等待队列,你必须调整内核:

IE :

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 回答