Django性能/内存使用[关闭]

Posted

技术标签:

【中文标题】Django性能/内存使用[关闭]【英文标题】:Django Performance / Memory usage [closed] 【发布时间】:2012-10-18 01:59:11 【问题描述】:

我正在一个 EC2 小型实例(1.7 GB RAM)上运行我的应用程序的 alpha 版本,上面带有 postgres 和 apache(wsgi-mod 不是作为守护程序,而是直接作为守护程序)。

性能还可以,但可能会更好。如果有太多的测试用户加入,我也担心内存使用。

从 Apache 切换到 nginx 服务器是否明智?有任何 Django 开发人员这样做并且对结果更满意吗?也欢迎任何其他提示。

谢谢

【问题讨论】:

这不应该是服务器故障吗? 不久前切换了 - 我做过的最好的一步。性能和 RAM 使用是一个梦想。应用程序通过 Gunicorn 提供 【参考方案1】:

我们在gunicorn 服务器中使用 nginx 和我们的 Django 应用程序。到目前为止,性能相当不错,但我没有与 Apache 设置进行任何直接比较。内存使用量很小,nginx 大约需要 10MB 内存,而 gunicorn 大约需要 150MB(但它也服务于多个应用程序)。当然,这可能因应用而异。

我建议简单地尝试一下,按照网络和/或 gunicorn 网站上的一些教程进行设置应该很容易。还可以获取一些可比较的测试用例,并使用某种监控软件(例如munin)来查看随时间的变化。

【讨论】:

感谢您的回答。这些数字非常有趣。我想知道我是否可以便宜,甚至可以使用更便宜的 Micro Ec2 实例 (613 MB)。我只有一个应用程序和很少的钱——作为一家初创公司。 :) 我可以试一试,看看我是否内存溢出。我今天做了一些研究,你对 uWSGI 的看法是什么,它是 gunicorn 的替代品,对吗?也感谢穆宁。可以派上用场。 请记住,微型实例没有分配固定数量的 CPU。但是开发一***实的测试和检查,也许就足够了!不过,没有关于 uWSGI 的个人经验,抱歉。 +1 为您提供建议。真的。微型实例在小爆发时效果最好,在该爆发中,它们实际上分配了 2 个 cpu。也许我应该留在小实例。至少连续分配一个 cpu。最后一个问题,您是否将数据库(postgres 或 mysql)保存在同一个实例上?谢谢 查看linode。对于较小的实例,它们的性价比非常有趣(免责声明:链接有我的推荐代码,但我实际上是一个非常满意的客户)。 Kave,我使用的是 RDS 而不是自托管的 mysql。【参考方案2】:

你为什么不使用 mod_wsgi 的守护模式?如果您使用嵌入式模式,如果您不注意如何设置 Apache,那么您正在为内存问题设置自己。

去阅读:

http://blog.dscpl.com.au/2012/10/why-are-you-using-embedded-mode-of.html

还可以在以下位置观看我的 PyCon 演讲:

http://lanyrd.com/2012/pycon/spcdg/

同时修改您的问题并指出您正在使用哪个 Apache MPM 以及 MPM 设置是什么。

至于使用 gunicorn 或 uWSGI 等替代方案,对于类似的配置,内存需求并没有太大的不同,因为底层服务器不会决定使用多少内存,而是会成为您在其上运行的特定 Python Web 应用程序。一个常见的误解是 gunicorn 或 uWSGI 以某种方式神奇地解决了所有问题,而 Apache 却做不到。为 Python Web 应用程序正确设置 Apache,不要依赖其默认设置,它与其他解决方案一样强大,并且可以根据您的要求提供更多的灵活性。

非常建议您进行一些监控,以找出真正的问题和瓶颈。

【讨论】:

+1 谢谢格雷厄姆。你的博客非常好,你的演讲内容丰富。我仍处于技术尝试阶段,毕竟可能会坚持使用 Apache-daemon。但是您也提到为了实现 nginx 的轻量级,Apache 需要禁用一些内置模块。这很难实现吗? 取决于您使用的 Linux 发行版以及是否使用其 Apache 发行版。例如cyberciti.biz/faq/howto-disable-apache-modules-under-linux-unix 其他平台可能有点不同。如果在 Apache 安装上运行,可能意味着注释掉适当的 LoadModule 行。 啊抱歉,忘了说我正在使用 Ubuntu 12.04 和附带的 Apache。所以我现在看到了如何禁用它们。是否有我可以安全禁用等的所有可用模块的列表? 您必须知道您正在使用哪些模块。因此,不是可以安全禁用的情况,但您不依赖于 Apache 配置的设置方式。【参考方案3】:

我的结果好坏参半。当应用程序快速、非阻塞时,nginx 以较小的内存占用表现良好。流量越大,收益越大。

我有几个速度较慢的 GIS 应用程序,在这种情况下,nginx 惨遭失败。我的建议是:不要在任何会阻塞几秒钟的东西上使用 nginx + wsgi。

【讨论】:

以上是关于Django性能/内存使用[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

最好的 .NET 内存和性能分析器? [关闭]

内存数据库django中的Postgresql

如何使用 django 保持 tensorflow 会话在内存中运行

使用java在内存中加载2GB [关闭]

linux之几个重要性能指标

Android遇到内存泄漏和性能优化,需要采取以下措施