web-dev-qa-db-ja.com

IISでの複数のphp-cgi.exeプロセス

本番サーバーはPHPアプリケーションをIIS 6.0で実行します。ピーク時に、php-cgi.exeプロセスが増加するといういくつかの問題がありましたサーバーがクロールし、通常の動作に戻すには、サーバーを複数回再起動する必要があります。サーバーが正常に実行されている場合、php-cgi.exeプロセスが10〜15しかないことに気付きました。タスクマネージャで。

Php-cgi.exeプロセスの数がピーク時に10から15から約200に増加する原因は何ですか?原因はどこにあるのでしょうか?

3
HYP

IIS6 CGIは通常、1つの要求-> 1つのプロセスです。 15の並行PHP-CGIプロセスは、おそらく15の並行PHP-CGIリクエストが原因です。または、PHPプロセスのハング率が高く、適切に終了していません。

Windowsでは、プロセスの起動は* nixほど安価ではありません(私は聞いています)。 Windowsスレッドは軽量で、プロセス内で簡単に起動できますが、プロセスの開始にはコストがかかります。

着信要求ごとに新しいプロセスを開始することは、「高価な」ものから「悲惨な」ものまでさまざまです。同時に200のプロセスが表示されると、負荷が増加する可能性があります。つまり、「処理中」の未処理のリクエストが200あります。ある時点で、パフォーマンスは、古い作業が完了する可能性があるよりも速く新しい作業が行われるところまで低下します。それに対処するためにサーバーを再起動している場合は、ユーザーを罰しているだけです。すぐに再試行するために別の要求を行う可能性のある人。

プロセスが滞っている場合、アプリにもハングするバグがある可能性があります。しかし、それはby byによるものです。

とにかく、これはすべてを取得するための長い時間のかかる方法です。FastCGIを試しましたか? http://learn.iis.net/page.aspx/247/using-fastcgi-to-Host-php-applications-on-iis-60/

IIS=のFastCGIでは、既存の非終了プロセスのプールを再利用できるため、1つの要求が新しいプロセスを開始、処理、終了する代わりに、各要求が実行中のワーカープロセスのプールに分散されます。 (この場合)PHP-CGI。

各PHP-CGIインスタンスは、1000以上のリクエストがポンプで送られている間も存続し、その後終了することが許可され、代わりに新しいインスタンスが開始されます。メモリからは、これを同時に実行して同時要求を処理するプロセスのグループがあり(デフォルトでは4、5または10、構成可能)、パフォーマンスは(はるかに)向上します。

4
TristanK

PHPでIIS6を実際に使用すべきではありません。IIS6は十分にサポートされていません。 IIS 7.5への切り替えを検討してください。

プロセス(対スレッド)はリソースを大量に消費するため、200のphp-cgiプロセスを実行している場合、システムはすべての利用可能なRAM=を使用しています。

maxInstancesを10 *使用しているCPUプロセッサの数に設定してみてください。

これにより、スピンアップできるCGIプロセスの量が制限されます。

また、IIS with PHPの代わりに、PHPを使用するWAMPパッケージを使用できます。 = Apacheモジュール(スレッドベース)。これにより、必要なリソースが大幅に削減され、通常はより多くの接続を処理できます。本番環境でサポートされているWampDeveloper Proを使用します。XAMPPとWAMPServerもありますが、これらは無料ですが本番環境で使用するのに最適です。

1
rightstuff

すべて帯域幅に基づいています。

接続ごとにphp-cgi.exeの新しいインスタンスが作成されます

より多くのユーザー= php-cgi.exeのより多くのインスタンス

1

実行する必要のあるスクリプトごとに1回実行されます。ピーク時間です...これらはあなたのサイトのユーザーです。

これを処理するためにスクリプトを最適化します。

0
Brad