apache2 + mod_fastcgi + suexec + php5.2 = 高負荷時に不安定

apache2 + mod_fastcgi + suexec + php5.2 = 高負荷時に不安定

私は、apache2+fastcgi+suexec+php5 を使用して、1 つのサーバーで複数 (約 30) の異なるサイトをホストしています。サイトによって負荷が異なり、スクリプトの実行時間も異なります (リクエストの処理に 5 ~ 7 秒かかるものもあれば、1 秒未満のものもあります)。

場合によっては、単一のサイトが非常に高い負荷を受けると (このサイトのすべての PHP インスタンスが作成および使用される)、Apache サーバー全体がハングします。Apache (ワーカー mpm) は上限まで新しいプロセスを作成します。負荷が高く、すぐにプロセス制限に達するサイトだけでなく、すべてのサイトに対してすべての新しいリクエストをキューに入れ始めているようです... Apache を再起動すると、問題は解決します...

設定: FastCgiConfig -singleThreshold 1 -multiThreshold 10 -listen-queue-depth 30 -maxProcesses 80 -maxClassProcesses 12 -idle-timeout 30 -pass-header HTTP_AUTHORIZATION -pass-header If-Modified-Since -pass-header If-None-Match

(以前はデフォルトの -listen-queue-depth = 100 でしたが、何も変わりませんでした...)

助言がありますか?

もう 1 つの質問 - この listen キューはどのように実装されていますか? これは Apache 全体に対して 1 つのキューですか、それとも定義されたすべての PHP アプリケーション (suexec サイト) に対して固有のキューですか?

次のようなことを実現したいと考えています。1 つのサイトに高い負荷がかかり、キューがいっぱいになった場合、サーバーは次のリクエストをバウンスしますが、これはこの 1 つのサイトに対してのみです。他のサイトは正常に動作するはずです...

答え1

Apache 2.4 では、php-fpm へのリクエストをプロキシできる新しい fastcgi プロキシ モジュール (mod_proxy_fcgi) が提供されています。mod_proxy を仲介として使用すると、メイン サーバーとは別にキューイングや枯渇パラメータを含むすべての mod_proxy オプションにアクセスできるようになります。

Apache 2.4 イベント MPM と php-fpm を使用してテスト サーバーにセットアップすることをお勧めします。さまざまなアプリケーションに合わせて各 PHP プールを調整することもできます。

答え2

代わりに mod_fcgid を試しましたか? サーバーでの高負荷の処理には、こちらの方がはるかに優れています。

答え3

fastcgi が PHP スクリプトをユーザー プロセスとして起動している場合は、/etc/security/limits.conf 定義 (具体的には nproc) が OS によって強制される必要があります。

つまり、Apache はそのユーザーとしてプロセスを起動しようとしますが、プロセス制限を超えたため OS はプロセスを強制終了します。

ただし、これは一種の場当たり的な方法であり、マシンがアイドル状態の場合は、依然として接続が切断されます。

大きなクライアントを専用のマシンにフォークしてはどうでしょうか。または、フットプリント/ランタイムの許容量を設定し、高ポートでリッスンするセカンダリ Apache を起動してはいかがでしょうか。mod_proxy を使用して、リクエストを透過的に渡すことができます。

とはいえ、私は fastcgi にあまり詳しくないので、すでに何らかのクォータ システムが利用可能になっている可能性があります。ただし、ドキュメントをざっと読んでも何もわかりませんでした。

答え4

一連の Web チュートリアルは、こちらでご覧いただけます: http://blog.stuartherbert.com/php/category/the-web-platform/

個人的には、これらは非常に参考になると思います。このチュートリアルも同様に役立つかもしれません: http://blog.stuartherbert.com/php/2008/10/07/can-you-secure-a-shared-server-with-php-fastcgi/

正直に言うと、トラフィックの多いサイトがそれほど多くのリソースを使用している場合は、そのサイトを独自のマシンに移動することをお勧めします。

関連情報