4

複数のサーバーで、Apache モジュール mod_fcgid を使用して、リクエストを処理する cgi スクリプトを提供し (チケットの検証と同様の処理)、処理の結果に基づいてサーバー上のファイルを提供するという問題があります。

ログに次のエラーが繰り返し記録されます。

[Mon Jan 30 23:11:41 2012] [warn] [client 95.35.160.193] mod_fcgid: error reading data, FastCGI server closed connection

[Mon Jan 30 23:11:41 2012] [warn] [client 95.35.160.193] (32)Broken pipe: mod_fcgid: ap_pass_brigade failed in handle_request_ipc function

[Mon Jan 30 23:13:34 2012] [warn] [client 37.8.52.128] mod_fcgid: can't apply process slot for /var/www/cgi-bin/assetx.fcgi

これらの問題により、サーバーが遅くなり、サービスが一時的に利用できないというエラーが発生する場合もあります。

サーバーには大量のトラフィックがあります。現在、次の fcgi ディレクティブを次のように構成しています。

FcgidMaxRequestsPerProcess       0
FcgidMaxProcesses       300
FcgidMinProcessesPerClass 0
FcgidIdleTimeout        240
FcgidIOTimeout  240
FcgidBusyTimeout 300

サーバーの平均負荷は正常で、プロセス数は平均 250 プロセスです。

私はこの問題について何日も調査を行ってきましたが、許可の問題だと言う人もいます。彼らの提案に従いましたが、役に立ちませんでした。上記のパラメーターを調整しようとしましたが、これらは私が試した最終的な値ですが、うまくいきませんでした。また、Apache の代わりに nginx を使用しようとしていますが、nginx を使用してサーバー上でこの高負荷で cgi スクリプトを実行する適切な方法が見つかりません。

この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

Apache がアプリに正常に接続できるようになる前に、アプリが死んでいます。答えは、アプリが死んでいる理由を見つけることです。

FastCGI プロセスは、エラー状態であっても、停止または終了することはありません。Apache は、FastCGI スクリプトが存在し続けることを期待しています。

あなたはCGIスクリプトを持っていると言いました。FastCGI をサポートするためにどのように変更しましたか?

通常、CGI::Fast のようなものに切り替え、die と exit のすべての呼び出しを削除し、スクリプトをリファクタリングして CGI::Fast while ループを使用して実行する必要があります。

于 2013-02-22T13:34:02.557 に答える