0

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

堆栈的工作方式如下:

VPS -> Docker 容器 -> nginx (ssl) -> Varnish -> 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 博客应用程序,什么是合适的值(指示)?
  • 我已经应用了本教程中推荐的调整(针对我的系统进行了调整)。我可以调整什么以及如何找出瓶颈。
4

1 回答 1

2

首先是关于 Docker 的一些说明。它并不意味着在单个 docker 容器中运行多个进程。Docker 不是虚拟机的替代品。它只是允许单独运行进程。所以docker图应该是:

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

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

旧的但仍然从根本上缓和的博客文章。请注意,一些建议不再相关,例如命令nsenter现在docker exec可用,但大多数博客文章仍然正确。


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

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

于 2015-12-12T15:55:46.087 回答