9

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

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

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

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

4

4 回答 4

8

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

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

为了记录,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 在单进程/多线程中。
于 2009-06-24T12:13:57.013 回答
3

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

于 2009-01-28T19:03:30.450 回答
2

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

于 2009-01-28T19:07:46.713 回答