【发布时间】:2011-03-04 05:46:42
【问题描述】:
对于客户端发出的前几个请求,我的 mod_wsgi django 应用程序似乎不断重新加载。这正在扼杀我的表现
经过足够多的请求后,它似乎安定下来,应用程序似乎不再重新加载。关于为什么会发生这种情况以及如何防止它的任何想法?
(我在 httpd.conf 中有以下内容:MaxRequestsPerChild 0,所以不是这样)
【问题讨论】:
标签: python django apache mod-wsgi
对于客户端发出的前几个请求,我的 mod_wsgi django 应用程序似乎不断重新加载。这正在扼杀我的表现
经过足够多的请求后,它似乎安定下来,应用程序似乎不再重新加载。关于为什么会发生这种情况以及如何防止它的任何想法?
(我在 httpd.conf 中有以下内容:MaxRequestsPerChild 0,所以不是这样)
【问题讨论】:
标签: python django apache mod-wsgi
这可能是因为您在 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 托管机制和内置开发服务器之间的行为差异。
【讨论】: