2009-01-28 96 views
9

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

随着一个(非常)小的站点加载和工作,它目前使用的是143MB的256MB RAM。

使用top命令我可以看到Apache正在使用52.9%的可用RAM,第二次使用的是memcache,使用2.1%。

考虑到我打算在这台服务器上安装好几个Django项目,我想知道是否有任何事情可以削减Apache正在使用的RAM数量?

回答

8

如果你想坚持用Apache,一些建议,大致难度顺序:

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

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

+0

它看起来很有趣。虽然我确实有一个问题:如果服务器重新启动,您是否必须再次为每个站点运行spawn命令? – 2009-01-28 19:58:54

+0

@Ty:我想你会把它放在一个init脚本中,在apache现在的地方。 – nosklo 2009-02-26 18:14:46

+0

我尝试将Apache + mod_wsgi中的Django应用程序切换为在Webfaction的共享主机上产生。也许我错误地配置了Spawning或者误解了结果,但是看起来像Spawning在同一个应用上使用的方式比Apache更多。 – Headcrab 2011-06-30 06:38:24

2

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

6

为了记录,OP使用术语MPM是不合情理的。 Apache中的MPM不是一个选项,您在使用Apache时总是使用MPM。选择是您正在使用的MPM。在UNIX上,两个主MPM或多处理模块是prefork和worker。在Windows上,始终使用winnt MPM。关于不同MPM的细节可以在Apache网站的Apache文档中找到。在mod_wsgi的。虽然背景下,你可能会更好阅读:

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

总之,虽然:

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