我刚刚将我的服务器从Apache / mod_wsgi转到了nginx / uwsgi堆栈 . 但是,与Apache相比,我看到的表现非常糟糕,尽管 server load is the same/even less during Christmas. 任何想法都是为什么,我对uWSGI / Nginx堆栈很新?这是我的配置:
[uwsgi]
chdir = / srv / www / poka / app / poka module = nginx.wsgi home = / srv / www / poka / app / env / main env = DJANGO_SETTINGS_MODULE = settings.prod // master = true processes = 10 socket = / srv / www / poka / app / poka / nginx / poka.sock chmod-socket = 666 vacuum = true pidfile = /tmp/project-master.pid harakiri = 60 max-requests = 5000
daemonize = /var/log/uwsgi/poka.log
3 回答
你真的需要10个流程吗?为什么你不尝试少量? uWSGI Nginx可以使用2/4进程处理大量并发请求,也许瓶颈就在那里 .
您可以
monitor cpu / mem进行详细比较
安装uwsgitop(通过pip install uwsgitop)来监控你的uwsgi进程
首先,您必须确定问题所在 . 假设你没有做任何狂热的事情,比如有大量负载的请求,我做了一些事情:
nginx: 使用$upstream_response_time记录上游请求的持续时间 . 将其与$request_time的总响应时间进行比较 . 这告诉你,时间丢失的地方,即nginx是否有问题,或上游组件(uwsgi,django,数据库......)如果uwsgi是问题...
uwsgi: 启用stats server,然后使用uwsgitop快速浏览统计数据如果uwsgi正常,请查看Python / Django正在做什么...
uwsgi+python: 启用pytracebacker-sockets以查看 Worker 正在做什么 . 如果你看到 Worker 卡住,启用(如果你的情况下这是合理的)harakiri模式,那么uwsgi可以回收被困 Worker . 当使用harakiri时,不要忘记启用pytracebacker,因为当一个worker被杀死时,它将为你提供Python堆栈跟踪 .
Django: 启用debug-toolbar以查看应用程序花费时间的位置和数量 .
当您确定组件时,您已经更接近解决方案,并且可以提出更具体的问题 .
(如果您正在做大请求,那么uwsgi / nginx的压缩设置和max-payload相关设置可能是很好的选择 . 它们让我们感到头疼 . )