在Amazon EC2 Micro实例上从Apache切换后,uWSGI / nginx / Django性能不佳

时间:2013-12-30 20:58:55

标签: django apache nginx amazon-ec2 uwsgi

我刚刚将我的服务器从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

3 个答案:

答案 0 :(得分:0)

你真的需要10个流程吗?为什么你不尝试少量? uWSGI + Nginx可以使用2/4进程处理大量并发请求,可能存在瓶颈。

答案 1 :(得分:0)

你可以

  1. 监视cpu / mem以进行详细比较

  2. 安装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相关设置可能是很好的选择。它们让我们感到头疼。)