我目前在GoDaddy的一个专用框上运行125个Django站点。 该网站是相对低stream量,我想知道我能做些什么来优化我的apacheconfiguration中的内存使用情况。 在将prefork指令调整为较低的MaxServer和MaxrequestsPerChild之前,该框会在大约5个小时的活动之后挂起。
我一直在search谷歌的答案,但我不能拿出任何明确的以下内容:
目前的configuration文件如下:
<VirtualHost *:80> ServerAdmin [email protected] DocumentRoot /var/www/projectroot/django/chat/static ServerName domain.com ServerAlias www.domain.com Alias /media /usr/lib/python2.5/site-packages/django/contrib/admin/media ErrorLog logs/www.domain.com-error_log CustomLog logs/www.domain.com-access_log common <Location "/"> SetHandler python-program PythonHandler django.core.handlers.modpython PythonPath "['/var/www/domain/django'] + sys.path" SetEnv DJANGO_SETTINGS_MODULE chat.settings_domain1 #chat is the name of the project all the sites reside in PythonDebug Off </Location> <Location "/media"> SetHandler None </Location> <Location "/site_media"> SetHandler None </Location> </VirtualHost>
谢谢! -Tom
我一定会去mod_wsgi。 它允许你定义用户,每个应用程序的线程/进程的数量。
我不太清楚内存的需求,但是mod_python在mod_wsgi上差不多每一个FAQ或者提示。 WSGIDaemonProcess允许你configuration很多选项,堆栈大小,进程数量和不同的超时时间可能是你感兴趣的。
我没有GoDaddy的经验,所以我不能告诉你有多远,你可以去configuration一切。
对于Apache的一部分,我肯定会使用prefork与正确的数字(取决于您希望的用户数量,你想允许多less孩子)
对于静态主机,您可以禁用所有处理程序,甚至强制某个MIMEtypes,以便configuration将正常工作。
如果内存是你的瓶颈,你可能需要从我的经验(不是那么多)检查ngninx内存使用情况可以用nginx比使用apache预测好很多,但是我不知道mod-wsgi + ngninx。
避免mod_python肯定是明智的。 也就是说,不要使用mod_wsgiembedded模式。 embedded模式不好的原因详述如下:
http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html
这可能是你遇到的问题。
你可以使用mod_wsgi守护进程模式。 虽然你的Django站点是线程安全的,但这样可以让你最大限度地减less整个守护进程的数量。
mod_wsgi守护进程模式与Apache prefork不兼容的说法是错误的。 您可以在任何Apache MPM上使用mod_wsgi守护进程模式。 问题是底层Apache运行时库是否具有内置的线程function,而不是使用prefork还是worker MPM。 这通常是这种情况,只有系统不是早期的BSD系统,它已经实现了线程化。 无论哪种方式,使用MPM作为减lessApache服务器subprocess所需的数量还是比较好的。
无论如何,使用mod_wsgi守护进程模式应该是相对简单的。 这个问题将决定你的Django网站是否线程安全。
编辑:忽略第一段。 见格雷厄姆的评论和回答。
Apache prefork与wsgi守护进程模式不兼容。 根据文档 ,守护进程模式需要线程。 所以如果你想要守护进程模式的灵活性,你需要使用Apache mpm worker。
基于这篇博文,我不会使用nginx的mod_wsgi。
所以我的首选设置是将nginx作为一个轻量级的前端/静态文件服务器,Apache mpm worker和mod_wsgi以daemon模式服务于Django内容。