如何防止mod_wsgi django应用程序重复重载?

时间:2010-06-15 22:50:49

标签: python django apache mod-wsgi

我的mod_wsgi django应用程序似乎不断重新加载客户端发出的前几个请求。这是在扼杀我的表现

经过足够的请求后,似乎安定下来,应用程序似乎不再重新加载。有关为什么会发生这种情况以及如何防止这种情况的任何想法?

(我在httpd.conf中有以下内容:MaxRequestsPerChild 0,所以不是吗)

1 个答案:

答案 0 :(得分:5)

这可能是因为您在UNIX系统上使用mod_wsgi和Apache的嵌入模式,甚至可能使用Apache prefork MPM,这使得情况变得更糟。简而言之,在该配置中,Apache是​​一个多进程Web服务器。将其与默认是在第一次请求时延迟加载应用程序这一事实相结合,当应用程序加载时,您将看到针对每个Apache服务器子进程的初始请求的延迟。

即使对于Django框架,这也不应过多,并且会质疑您的特定应用程序在启动时所做的事情会导致长时间延迟或大负载峰值。

要了解这些问题,请务必阅读:

http://blog.dscpl.com.au/2009/03/load-spikes-and-excessive-memory-usage.html   http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading

然后更改为使用mod_wsgi的守护进程模式,如mod_wsgi wiki页面上所记录的那样。特别是从:

开始

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

如果确实需要运行多个守护程序进程而不仅仅是希望应用程序将获得什么样的负载,并且加载时间仍然是一个问题,那么您可以使用WSGIImportScript配置mod_wsgi以及在进程启动之前在任何请求进入之前预加载WSGI应用程序的其他方法。但是对于Django,请确保使用以下所述的WSGI脚本文件:

http://blog.dscpl.com.au/2010/03/improved-wsgi-script-for-use-with.html

而不是Django文档描述的延迟加载,你仍然可以看到问题以及WSGI托管机制和内置开发服务器之间的行为差​​异。