Django + Gunicorn + nginx的性能非常差。甚至无法获得8 qps

时间:2015-06-28 13:35:05

标签: django nginx gunicorn

我正在使用nginx + gunicorn来提供django应用并将其部署在EC2(m1.small实例)上。

我有这个观点:

def hi(request):
    return HttpResponse('hi', content_type='text/plain')

已映射到网址/hi/。所以它基本上只在hi返回[myurl]/hi

现在,当我从[myurl]/hi加载测试此域(loader.io)时,这甚至不会超过 250个客户端超过30秒测试。 (每秒约8个请求)

This is(部分)我的nginx access.log文件。它基本上只是在499之后提供200 s。 (loader.io中的超时设置为10秒)

我必须做一些严重错误的事情。我怎么知道?

我使用yet-another-django-profiler对其进行了分析,以下是输出: enter image description here

我在Elastic Beanstalk(它使用Apache服务器)上也部署了这个django应用程序(m3.large实例),并且我也得到了糟糕的性能。 我现在的中间件是:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    # 'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',
    # 'silk.middleware.SilkyMiddleware',
    # 'yet_another_django_profiler.middleware.ProfilerMiddleware',
    # 'debug_toolbar.middleware.DebugToolbarMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    # 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    # 'django.contrib.messages.middleware.MessageMiddleware',
    # 'django.middleware.clickjacking.XFrameOptionsMiddleware',
    # 'django.middleware.security.SecurityMiddleware',
)

之前没有一个被评论过。当我评论出这9行时,我得到了性能提升。现在我可以从这个应用程序中获得60 qps。但我认为我在做更多的错误,并且可以进一步扩展。

2 个答案:

答案 0 :(得分:2)

这只是在黑暗中刺杀而没有更多的事情继续下去,而且我没有声名誉对你原来的问题发表评论:我注意到你的gunicorn启动脚本已经

{{2} }

如果你有调试级别的日志记录(在gunicorn中,特别是在Django项目中),它将解释为什么通过注释中间件来提高性能以及为什么你会不断地从不同的部署架构中降低性能。

调试级别日志记录输出大量信息。

答案 1 :(得分:0)

我不知道你可能做错了什么,但我建议你再用uWSGI而不是Gunicorn进行测试吗?根据许多基准测试,uWSGI似乎提供了比Gunicorn更好的性能,如果性能没有显着改变,您将能够专注于对nginx或EC2配置的调查。 我不想改变宗教信仰,只是鼓励你通过消除过程来找到它。

希望它会有所帮助!