3

私はdjangoでmod-wsgiを使用しており、djangoではピルセンを使用して全文検索を行っています。

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
4

2 に答える 2

1

この問題の修正は、mod_wsgi 2.4 に含まれています。

于 2009-06-25T03:31:51.523 に答える
1

議論の詳細については、http://code.google.com/p/modwsgi/issues/detail?id=131を参照してください。

つまり、mod_wsgi はデーモン プログラムのシグナルをブロックするため、initVM が機能しなくなる可能性があります。さらに、jcc の Andi によると、initVM はメイン スレッドからのみ呼び出すことができ、さらに問題が発生する可能性があります。

そのため、initVM() を使用した検索コードを完全に別のプロセスに移動することにし、問題を解決しました。

于 2009-02-17T02:45:56.687 に答える