【问题标题】:Django Deployment: Cutting Apache's OverheadDjango 部署:削减 Apache 的开销
【发布时间】:2010-10-04 02:00:14
【问题描述】:

我有一个小型 VPS 服务器,它有一个 Nginx 前端,它提供静态媒体文件并将 Django 请求传递回运行 mod_wsgi 的 Apache 2.2 prefork MPM 服务器。

加载并运行一个(非常)小的站点,它当前使用 143MB 的 256MB 内存。

使用top 命令,我可以看到 Apache 使用了 52.9% 的可用 RAM,其次是 memcache,使用了 2.1%。

考虑到我计划在这台服务器上放置很多 Django 项目,我想知道是否有什么办法可以减少 Apache 使用的 RAM 量?

【问题讨论】:

    标签: django apache deployment mod-wsgi


    【解决方案1】:

    如果你想坚持使用 Apache,一些建议,大致按难易程度排列:

    • 使用 Apache worker MPM 而不是 prefork。每个客户端连接使用的实际内存会更少,但请注意,为 Linux 上的 Apache 分配的虚拟内存可能看起来非常高,因为 Linux 为每个线程的堆栈分配了 8MB。这实际上并不重要,除非您的 VPS 是脑死亡并且限制虚拟内存而不是实际的 RSS(驻留集大小)内存。在这种情况下,您可以了解如何降低线程堆栈大小here(在内存受限的 VPS 部分下)。
    • 编辑您的 Apache 配置文件并大致按比例减少 StartServers、MaxClients、MinSpareThreads 和 MaxSpareThreads 设置。适当的级别将是您所需的内存使用量和您需要能够服务的并发客户端数量之间的平衡。
    • 切换到mod_wsgi(在守护程序模式下)而不是 mod_python。

    【讨论】:

    • 感谢您的回复。我目前已经在使用 MPM 和 mod_wsgi。你知道哪里有关于 StartServers、MaxClients、MinSpareThreads 和 MaxSpareThreads 设置方面配置 Apache 的好指南吗?它们目前设置为默认值。
    • 手头没有一个好的指南,但只需在 Apache 文档中查找这些指令,它们非常合乎逻辑。通常我只是将它们从默认值按比例缩小,主要基于将 MaxClients 设置为我认为需要服务的并发连接数。
    【解决方案2】:

    为了记录,OP 对术语 MPM 的使用是没有意义的。 Apache 中的 MPM 不是一个选项,您在使用 Apache 时总是使用 MPM。选择是您使用的 MPM。在 UNIX 上,两个主要的 MPM 或多处理模块是 prefork 和 worker。在 Windows 上,总是使用 winnt MPM。可以在 Apache 网站上的 Apache 文档中找到有关不同 MPM 的详细信息。但是,在 mod_wsgi 的上下文中,您最好阅读以下内容:

    http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

    简而言之:

    • prefork MPM 是多进程/单线程的。
    • worker MPM 是多进程/多线程的。
    • winnt MPM 在单进程/多线程中。

    【讨论】:

    • 我的问题已经更新为我当时使用的 MPM 类型。
    【解决方案3】:

    您可以考虑使用Spawning 进行部署。

    【讨论】:

    • 看起来很有趣。虽然我确实有一个问题:如果服务器重新启动,您是否必须再次为每个站点运行 spawn 命令?
    • @Ty:我想你应该把生成脚本放在一个初始化脚本中,就在 apache 现在所在的地方。
    • 我尝试在 Webfaction 的共享主机上将 Django 应用程序从 Apache + mod_wsgi 切换到 Spawning。也许我错误地配置了 Spawning 或误解了结果,但看起来 Spawning 在同一个应用程序上使用的内存比 Apache 多。
    【解决方案4】:

    你可以在 FastCGI 上运行 Django。然后 nginx 可以直接驱动它,而不是通过 Apache。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-14
      • 2013-08-03
      • 2016-02-26
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      相关资源
      最近更新 更多