我刚刚将我的服务器从Apache / mod_wsgi转移到nginx / uwsgi堆栈。但是,与Apache相比,我看到的表现非常糟糕,尽管圣诞节期间服务器负载相同甚至更低。任何关于原因的想法,我对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
答案 0 :(得分:0)
你真的需要10个流程吗?为什么你不尝试少量? uWSGI + Nginx可以使用2/4进程处理大量并发请求,可能存在瓶颈。
答案 1 :(得分:0)
你可以
监视cpu / mem以进行详细比较
安装uwsgitop(通过pip install uwsgitop)来监控你的uwsgi进程
答案 2 :(得分:0)
首先,您必须确定问题所在。假设你没有做任何狂热的事情,比如有大量有效负载的请求,我会做一些事情:
nginx:使用$upstream_response_time记录上游请求的持续时间。将其与$request_time的总响应时间进行比较。这告诉你,时间丢失的地方,即nginx是否有问题,或上游组件(uwsgi,django,数据库......)如果uwsgi是问题......
uwsgi:启用stats server,然后使用uwsgitop快速了解统计信息 如果uwsgi没问题,请查看Python / Django正在做什么......
uwsgi + python:启用pytracebacker-sockets以查看工作人员正在做什么。如果你看到工人卡住,启用(如果你的情况下这是合理的)harakiri模式,那么uwsgi可以回收被困工人。当使用harakiri时,不要忘记启用pytracebacker,因为当一个worker被杀时,它将为你提供 Python 堆栈跟踪。
Django:启用debug-toolbar以查看应用程序花费时间的位置和数量。
当您确定了该组件后,您已经更接近解决方案,并且可以提出更具体的问题。
(如果你 做大请求,那么uwsgi / nginx的压缩设置和max-payload相关设置可能是很好的选择。它们让我们感到头疼。)