我一直有内存使用问题,并希望通过使用名为dozer:http://pypi.python.org/pypi/Dozer的wsgi中间件来监控内存泄漏的可能性。
以下是apache错误日志:
AssertionError:Dozer中间件在多进程环境中不可用
以下是wsgi.py的代码段:
from django.core.wsgi import get_wsgi_application
from dozer import Dozer
application = get_wsgi_application()
application = Dozer(application)
此代码全部在manage.py的shell中运行,没有错误。
以下是显示的具体错误:
服务器遇到内部错误或配置错误,无法完成您的请求。 请联系服务器管理员,[无地址]并告知他们错误发生的时间,以及可能导致错误的任何操作。 服务器错误日志中可能提供了有关此错误的更多信息。
安装的推土机蛋是最新的(python 2.7),也许服务器需要专门为这样的配置?
以下是我的wsgi设置:
ServerRoot "/path/django/apache2"
LoadModule dir_module modules/mod_dir.so
LoadModule env_module modules/mod_env.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule mime_module modules/mod_mime.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule wsgi_module modules/mod_wsgi.so
KeepAlive Off
Listen 28861
MaxSpareThreads 3
MinSpareThreads 1
ServerLimit 1
SetEnvIf X-Forwarded-SSL on HTTPS=1
ThreadsPerChild 5
WSGIDaemonProcess django threads=12 python-path=/path/django:/path/django/DareHut:/path/django/lib/python2.7
WGIProcessGroup django
WSGIRestrictEmbedded On
WSGILazyInitialization On
WSGIScriptAlias / /path/django/DareHut/DareHut/wsgi.py
我该怎么办?感谢
答案 0 :(得分:3)
从Apache发布mod_wsgi配置并阅读:
http://code.google.com/p/modwsgi/wiki/ProcessesAndThreading
要使其工作,您无法使用多进程配置。
这意味着您无法在UNIX系统上使用mod_wsgi嵌入模式。
即使您使用守护程序模式,也必须使用守护程序进程组中只有一个进程的配置。
虽然这样做有一个警告。不要使用WSGIDaemonProcess的'processes = 1'选项来做到这一点。您应该完全省略'processes'选项,并将其默认为单个进程。
任何使用'processes'选项都会导致'wsgi.multiprocess'被标记为True,这会导致Dozer抱怨。任何使用该选项,即使值为'1',触发该标志都是设计的,因此当跨多个Apache服务器进行负载平衡时,即使使用单个进程,也可以将服务器标记为多进程安排的一部分。 / p>
所以使用:
WSGIDaemonProcess mygroup
WSGIProcessGroup mygroup
可能你已经使用了'processes'选项,或者忘记了WSGIProcessGroup,并且实际上并没有在守护进程模式下运行,而是在嵌入模式下运行错误。
顺便说一句,如果你在浏览器的标签标签中看到'200错误'是mod_wsgi 3.4中的一个小错误(如果你正在使用它)。返回的HTTP状态代码仍然是500,因为它应该是所有的解释,但是mod_wsgi没有正确清除状态行,所以Apache将用它自己的500状态行替换它,因此选项卡中使用的状态行标签是错误的。答案 1 :(得分:1)
使用manage.py runserver
在本地运行它。
在Dozer(使用pdb或您的IDE)中将断点放在某些战略位置,例如Dozer.__init__
的开头和Dozer.__call__
的开头。 Dozer
中定义了dozer/leak.py
。
一步一步,直到看到抛出异常。
这不是一个简单的答案,但你会发现问题。