0

Apache/mod_wsgi/Ladon を介して実行されている python スクリプトの奇妙な動作があります。python シェルから実行すると、すべてが正常に動作し、1 台のマシンではすべて正常に動作しますが、別のマシンでは同じスクリプトがハングし、そのように見えます無期限に何かを実行または待機している: それは 192.168.xxx.xxx/ws/ からページを開いていることです (ブラウザは何度も何度もロードされ、向きを変えます。つまり、 と言っています)。apache / ladonを介して使用すると、インポートされたスクリプトが終了しないように見えるため、何が起こったのかわかりません.apacheログにログを記録しても何も表示されません。(そして、両方のマシンが同じように構成されているので、私はそれで頭が痛いです:/)

スクリプトがファイルシステムとデータベースからいくつかのデータをロードするとき、ハングはこれらのリソースを無期限にロックすることによるものでしょうか?

以下の行のようにぶら下がっているモジュールをラップして、何もロックされていないことを確認できますか? 実際に私はそうしようとしましたが、まったく何も変わりませんが、これが私の最初の質問です。

[...]
from multiprocessing import Lock
mutex = Lock()

mutex.acquire()
import MyHangingModule
mutex.release()
[...]

Apache からページを提供するときに無限のタイムアウトで終了する場合はありますか? つまり、python mod_wsgi/ladon スクリプトが apache または ladon によって殺されましたが、何かがまだ殺されているからの応答を待っていますか? サーバーをシャットダウンするときのように、次のようになります。

[Tue Jul 09 16:07:47 2013] [warn] child process 1676 still did not exit, sending a SIGTERM
[Tue Jul 09 16:07:49 2013] [warn] child process 1676 still did not exit, sending a SIGTERM
[Tue Jul 09 16:07:51 2013] [warn] child process 1676 still did not exit, sending a SIGTERM
[Tue Jul 09 16:07:53 2013] [error] child process 1676 still did not exit, sending a SIGKILL
[Tue Jul 09 16:07:54 2013] [notice] caught SIGTERM, shutting down

(mod_status で pid を検索すると、実際には W モードのままのハンドリング スクリプトです)

編集: wsgi について、wsgi.conf 内には何もありません。すべてがコメントされています # 実際には、デフォルトの Debian インストールからインストールします。私が見るべきものはありますか?それとも私が明らかに見逃しているのですか?

もう1つは、デフォルトのDebianでもあります(実際には構成ファイル内の変更はありませんが、特にapache2-mpm-workerをインストールします):

# worker MPM
<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75 
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

の出力/usr/sbin/apache2ctl -l

Compiled in modules:
  core.c
  mod_log_config.c
  mod_logio.c
  worker.c
  http_core.c
  mod_so.c

wsgi の mod について ( WSGIApplicationGroup %{GLOBAL}) にwsgi.conf) を追加しない場合:

<pre>
mod_wsgi.process_group = ['']
mod_wsgi.application_group = ['myserver|/mycfg'] # mycfg is actually the name of the python script while i have replaced the server name for posting here
wsgi.multithread = [True]
</pre>

wsgi の mod について ( WSGIApplicationGroup %{GLOBAL}) をwsgi.conf) に追加した後 (したがって、他のスクリプトでは非常に遅い):

<pre>
mod_wsgi.process_group = ['']
mod_wsgi.application_group = ['']
wsgi.multithread = [True]
</pre>

まあ、それが助けになるなら、これは遅いかもしれないウェブサービスを使ったセッションのログ部分です: (実際にはexternalDataLoader.py loaded: 0:00:00.394606 (21941 entries loaded) was shared by every one and then occurs only one. Also i have deactivate all others python handled... can this be that the twomod_wsgi (pid=xxxxx): Attach interpreter応答なしで無期限に待機し、サーバー全体と他の WS クエリを「子プロセスが終了しない」で終了するようにしますか?

[Wed Jul 24 10:49:20 2013] [notice] caught SIGTERM, shutting down
[Wed Jul 24 10:49:21 2013] [info] mod_wsgi (pid=11199): Initializing Python.
[Wed Jul 24 10:49:21 2013] [notice] Apache/2.2.16 (Debian) mod_wsgi/3.3 Python/2.6.6 configured -- resuming normal operations
[Wed Jul 24 10:49:21 2013] [info] Server built: Mar  3 2013 11:36:06
[Wed Jul 24 10:49:21 2013] [info] mod_wsgi (pid=11203): Initializing Python.
[Wed Jul 24 10:49:21 2013] [info] mod_wsgi (pid=11199): Attach interpreter ''.
[Wed Jul 24 10:49:21 2013] [info] mod_wsgi (pid=11203): Attach interpreter ''.
[Wed Jul 24 10:49:39 2013] [info] [client 192.168.1.130] mod_wsgi (pid=11199, process='', application=''): Loading WSGI script '/var/www/mywebserver/ws/wshandler.py'., referer: http://192.168.1.5/demo/search.html
[Wed Jul 24 10:49:40 2013] [error] externalDataLoader.py loaded: 0:00:00.394606 (21941 entries loaded)
[Wed Jul 24 10:49:42 2013] [error] WSforSearchInsideExternalData. loaded: 0:00:00.000032.
[Wed Jul 24 10:49:42 2013] [error] searched [test] in [External1]: 0:00:00.026233
[Wed Jul 24 10:49:42 2013] [error] searched [test] in [External2]: 0:00:00.067869
[Wed Jul 24 10:49:43 2013] [error] searched [test] in [External3]: 0:00:00.104222
[Wed Jul 24 10:49:43 2013] [error] searching done for [test]: 0:00:00.104222
[Wed Jul 24 10:49:59 2013] [info] [client 192.168.1.130] mod_wsgi (pid=11203, process='', application=''): Loading WSGI script '/var/www/mywebserver/ws/wshandler.py'., referer: http://192.168.1.5/demo/search.html
[Wed Jul 24 10:50:00 2013] [error] externalDataLoader.py loaded: 0:00:00.384349 (21941 entries loaded)
[Wed Jul 24 10:50:02 2013] [error] WSforSearchInsideExternalData. loaded: 0:00:00.000033.
[Wed Jul 24 10:50:02 2013] [error] searched [abjg] in [External1]: 0:00:00.026000
[Wed Jul 24 10:50:02 2013] [error] searched [abjg] in [External2]: 0:00:00.066215
[Wed Jul 24 10:50:02 2013] [error] searched [abjg] in [External3]: 0:00:00.100293
[Wed Jul 24 10:50:02 2013] [error] searching done for [abjg]: 0:00:00.100293
[Wed Jul 24 10:50:40 2013] [error] searched [abjg] in [External1]: 0:00:00.001513
[Wed Jul 24 10:50:40 2013] [error] searched [abjg] in [External2]: 0:00:00.080266
[Wed Jul 24 10:50:40 2013] [error] searched [abjg] in [External3]: 0:00:00.119280
[Wed Jul 24 10:50:40 2013] [error] searching done for [abjg]: 0:00:00.119280
[Wed Jul 24 10:50:48 2013] [error] searched [abje] in [External1]: 0:00:00.001491
[Wed Jul 24 10:50:48 2013] [error] searched [abje] in [External2]: 0:00:00.079586
[Wed Jul 24 10:50:48 2013] [error] searched [abje] in [External3]: 0:00:00.123212
[Wed Jul 24 10:50:48 2013] [error] searching done for [abje]: 0:00:00.123212
4

1 に答える 1

1

以下で説明されている解決策を参照して試してください。

サブインタープリターでは機能しない拡張モジュールを使用している可能性があります。

つまり、Apache 構成に追加します。

WSGIApplicationGroup %{GLOBAL}
于 2013-07-10T03:38:04.277 に答える