每秒优化nginx请求

时间:2015-12-12 14:51:38

标签: django performance nginx varnish requests-per-second

我正在尝试优化单核1GB ram Digital Ocean VPS以处理每秒更多的请求。经过一些调整(工人/ gzip等)后,它每秒提供大约15个请求。我没有任何东西可以比较,但我认为这个数字可以更高。

堆栈的工作原理如下:

VPS - > Docker容器 - > nginx(ssl) - >清漆 - > nginx - > uwsgi(Django)

我知道这是一个长链,而Docker可能会导致一些开销。但是,几乎所有请求都可以由Varnish处理。

这些是我的测试结果:

ab  -kc 100 -n 1000 https://mydomain | grep 'Requests per second'
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Requests per second:    18.87 [#/sec] (mean)

我实际上有3个问题:

  • 我是否更正,每秒18.87次请求的数量很少?
  • 对于一个简单的Varnished Django博客应用程序,什么是适当的值(指示)?
  • 我已经从this tutorial应用了推荐的调整(针对我的系统进行了调整)。我可以调整哪些内容以及如何找出瓶颈。

1 个答案:

答案 0 :(得分:2)

首先关于Docker的一些注意事项。 意味着在单个docker容器中运行多个进程。 Docker不是VM的替代品。它只允许独立运行进程。所以docker图应该是:

VPS -> docker nginx container -> docker varnish container -> docker django container

为了让您的生活使用多个Docker容器更简单,我建议使用Docker-compose。它并不完美,但却是一个很好的开始。

旧的,但仍然从根本上放松blog post。请注意,有些建议与nsenter不再相关,因为docker exec命令现在可用,但大部分博文仍然正确。

至于您的性能问题,是的,每秒18个请求非常低。然而,这个问题可能与nginx无关,很可能在你的Django应用程序中并且可能是清漆(但不太可能)。

要在Django中调试PA问题,我建议使用django-debug-toolbar。 Django中的大多数问题都是由不必要的SQL查询引起的。您可以在调试工具栏中轻松查看它们。要解决大多数问题,您可以使用select_related()prefetch_related。有关更详细的分析,我还建议您分析您的应用程序。 cProfile是一个很好的开始。此外,一些像PyCharm这样的IDE包含内置的分析器,因此很容易对应用程序进行分析,以查看哪些功能在大多数情况下都可以优化。最后,您可以使用第三方工具来分析您的应用程序。即使是免费的newrelic帐户也会为您提供相当多的信息。或者你可以使用opbeat,这是一个新的酷孩子。