PHP Windows2008サーバー上でIIS 7.5で実行されている7つのWebサイトがあります。それらはすべてvery現在遅い。
タスクマネージャーを見ると、約10個のphp-cgi.exeプロセスがあり、25%を使用している1つを除いて、すべてCPUの0%を使用しています。これはクアッドコアサーバーであるため、1つのコアを100%使用しています。
数秒間見ると、25%かかるプロセスは0%になり、別のphp-cgi.exeプロセスは25%にジャンプします。したがって、すべてのphp-cgi.exeプロセスが並んでいて、単一のコアで待機しており、各プロセスは可能な場合はプロセッサの100%を使用します。
7つのサイトはそれぞれIISの独自のアプリケーションプールにあり、FastCGIを使用しています。 PHPバージョンは5.3です。
何か案は?ありがとう!
編集: FastCGIの設定は次のとおりです。
<fastCgi>
<application fullPath="C:\Program Files (x86)\PHP\v5.3\php-cgi.exe" monitorChangesTo="C:\Program Files (x86)\PHP\v5.3\php.ini" activityTimeout="600" requestTimeout="600" instanceMaxRequests="10000">
<environmentVariables>
<environmentVariable name="PHP_FCGI_MAX_REQUESTS" value="10000" />
<environmentVariable name="PHPRC" value="C:\Program Files (x86)\PHP\v5.3" />
</environmentVariables>
</application>
</fastCgi>
編集#2:部分的に理解しました。 PHPは、アクセス許可の問題のためにガベージコレクションセッションではなかったため、何百万ものセッションファイルがありました。
しかし、なぜそれが1つのコアしか使用しないのかを知りたいのです。サイトは現在はるかに高速ですが、私たちはそれを解決していません。誰か知っていますか?
問題は、PHPがセッションファイルを保持しているフォルダー(sess _)のアクセス許可が間違っていたことです。このサーバーを展開してからガベージコレクションが機能しなかったか、ただし、アプリプールなどのIDを変更して、新しいIDがファイルを削除するためのアクセス権を持たないようにしました。とにかく、その一時フォルダーに200万を超えるsess_ファイルがありました。数時間かかりましたが、最終的には"del/F/Q sess _"コマンドが完了し、サイトを再起動しました。すべてが正常に再開されました(平均ページ読み込み時間60秒から、1秒未満まで)。これかどうかはわかりません。 「結合されたすべてのcgi-php.exeプロセスが複数のコア結合を使用することはない」問題を修正したかどうかは修正されましたが、Windows実装内のPHP sess_ファイルは、そのような現象も引き起こすように設計されている可能性があります(たとえば、単一アパートメントのスレッドの場合)。
とにかく、話の教訓は、CPU消費量が非常にゆっくりと着実に増加し(おそらくシングルコアの100%で横ばいになる)、http応答時間もゆっくりと増加する場合は、保存するフォルダーを確認してください。 phpセッションファイル(sess_ *)を使用して、そのフォルダーを開いたときにWindowsエクスプローラーがクラッシュするかどうかを確認してください。 :)
(ちなみに、W2k8(R2ではない)なので、IIS 7ではなく7.5)だと思います)