我正在使用mod-wsgi和django,而在django中我使用pylucene进行全文搜索。
虽然mod-wsgi配置为嵌入模式,但完全没有问题。 但是当mod-wsgi配置为守护进程模式时,apache就会卡住, 并且浏览器只是继续加载但没有出现。
然后我将问题识别为jcc.initVM()。 这是我的wsgi脚本:
import os, sys, jcc
sys.stderr.write('jcc.initVM\n')
jcc.initVM()
sys.stderr.write('finished jcc.initVM\n')
....
重新启动Apache后,从浏览器发出请求后,我发现/var/log/apache2/error.log 只有:
jcc.initVM
意味着它被卡在jcc.initVM()行。 (如果将mod_wsgi配置为嵌入模式,则没有问题。)
这是我的/ etc / apache2 / sites-available / default:
WSGIDaemonProcess site user=ross group=ross threads=1
WSGIProcessGroup site
WSGIScriptAlias / /home/ross/apache/django.wsgi
<Directory /home/ross/apache/>
Order deny,allow
Allow from all
</Directory>
最后,我发现在jcc(jcc.cpp)的源代码中,它挂起了函数:
JNI_CreateJavaVM(&vm, (void **) &vm_env, &vm_args)
如何解决问题?
程序版本:
libapache2-mod-wsgi 2.3-1
jcc 2.1
python 2.5
Apache 2.2.9-8ubuntu3
Ubuntu 8.10
答案 0 :(得分:1)
有关讨论详情,请参阅http://code.google.com/p/modwsgi/issues/detail?id=131。
总之, mod_wsgi将阻止守护程序的信号,这可能使initVM不起作用。此外根据 来自jcc的andi,initVM只能从主线程调用,也可能导致进一步的问题。因此我决定将搜索代码与initVM()一起移动到一个完全独立的过程并解决问题。
答案 1 :(得分:1)
此问题的修复程序包含在mod_wsgi 2.4中。