2

Apache、Fast-CGI、および Perl アプリケーションの問題をデバッグしています。根本的な原因は、特定の操作が行われた場合、Perl アプリケーションを終了して再ロードする必要があることです。CGI では、リクエストごとにアプリケーションがロードされるため、問題はありません。

ただし、Fast CGI プロトコルはこのケースを考慮していないことがわかりました。終了することを WebServer に通知する方法はありません。終了するだけです。

しかしそうすると、mod_fastcgi 側で競合状態のように見えました。プログラムが終了したことを認識しますが、リクエストを送信しようとします。最終的にはあきらめて、ブラウザーにエラー 500 を返します。

Web で同様のエラー メッセージが表示されますが、これらは 500 リクエスト後に PHP が終了することに関するものであり、解決策は fastcgi にプロセスあたりのリクエスト数を 500 に制限するように指示することです。一定数のリクエストの後ではありません。

Info: Apache モジュールをロードしています:

LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so

2 つのログ行: サーバーは、アプリが終了したことを検出しましたが、接続を試みました。

[Thu Jul 05 15:02:32 2012] [warn] FastCGI: (dynamic) server "/Users/sfomberg/Sites/cgi-bin/mt/mt.cgi" (pid 9277) terminated by calling exit with status '0'
[Thu Jul 05 15:02:32 2012] [warn] FastCGI: (dynamic) server "/Users/sfomberg/Sites/cgi-bin/mt/mt.cgi" has failed to remain running for 30 seconds given 3 attempts, its restart interval has been backed off to 600 seconds

最後に、あきらめます:

[Thu Jul 05 15:03:07 2012] [error] [client 127.0.0.1] FastCGI: comm with (dynamic) server "/Users/sfomberg/Sites/cgi-bin/mt/mt.cgi" aborted: (first read) idle timeout (30 sec), referer: http://localhost/~sfomberg/cgi-bin/mt/mt.cgi?__mode=cfg_plugins&blog_id=0&switched=1
[Thu Jul 05 15:03:07 2012] [error] [client 127.0.0.1] FastCGI: incomplete headers (0 bytes) received from server "/Users/sfomberg/Sites/cgi-bin/mt/mt.cgi", referer: http://localhost/~sfomberg/cgi-bin/mt/mt.cgi?__mode=cfg_plugins&blog_id=0&switched=1

リクエストを終了する直前にリスニング ソケットを閉じようとしましたが (リスニング ソケットは fileno 0 です)、うまくいきませんでした。

ありがとう。

4

1 に答える 1

0

問題は mod_fastcgi が古いバージョンであったためでした - 2.4.2 を 2.4.6 にアップグレードすることで解決しました。

また、mod_fcgid にはこの問題はありません。

于 2012-07-06T06:39:33.440 に答える