我有一个小型VPS服务器,它有一个Nginx前端,提供静态媒体文件,并将Django请求传递回运行mod_wsgi的Apache 2.2 prefork MPM服务器.
有一个(非常)小网站加载和工作,它目前使用143MB的256MB RAM.
使用该top
命令,我可以看到Apache使用了52.9%的可用RAM,其中memcache使用了2.1%.
考虑到我打算在这台服务器上安装相当多的Django项目,我想知道我是否可以做些什么来削减Apache使用的RAM量?
如果你想坚持Apache,一些建议,大致按难度顺序:
使用Apache worker MPM而不是prefork.每个客户端连接使用的实际内存将更低,但请注意,在Linux上为Apache分配的虚拟内存可能看起来非常高,因为每个线程的堆栈分配了8MB Linux.这实际上并不重要,除非你的VPS是脑死亡而且是虚拟内存而不是实际的RSS(驻留集大小)内存.在这种情况下,您可以在此处学习如何降低线程堆栈大小(在内存受限的VPS部分下).
编辑Apache配置文件并大致按比例减少StartServers,MaxClients,MinSpareThreads和MaxSpareThreads设置.适当的级别将是您所需的内存使用量与您需要能够服务的并发客户端数量之间的平衡.
切换到mod_wsgi(在守护进程模式下)而不是mod_python.
对于记录,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.