php cgi.exe が多すぎる場合の解決策: まずシステムのディスク容量を確認し、次に CGI モードまたは ISAPI モードで PHP をインストールし、次にプログラムを変更し、最後に Web サーバー構成の fastcgi 構成ファイルのパラメーターを最適化します。
推奨: 「PHP ビデオ チュートリアル 」
サーバーには多数の php-cgi が含まれています.exe プロセスにより、CPU 使用率 100% の解決策が発生します。
この問題は通常、プログラムの問題です。たとえば、プログラムは PHP を実行するために fastcgi モードを使用し、プログラムによって設定された StartProcesses も同様です。 6 つ以上など、大きいもの。
解決策の参照:
1. システムのディスク容量を確認します。システムに一時ファイルが多すぎないか確認します。MySQL データベースの一時ファイルはデフォルトで c:/windows/temp に保存されるため、数万、場合によっては数百万の小さなファイルが蓄積され、システム ディスクを圧迫します。 。
del *.* すべてのファイルを削除します
2.PHP は広く使用されている動的スクリプト言語ですが、IIS には PHP 言語のサポートが組み込まれていないため、必要な場合はPHP を使用する場合は、自分でインストールする必要があります。 PHP は CGI モードと ISAPI モードでインストールできますが、ISAPI モードの方がパフォーマンスが高いため、ISAPI モードの使用を推奨します。
3. プログラムを変更できる場合は、プログラム構成ファイルの StartProcesses 値を 2 に減らして、改善されるかどうかを確認することをお勧めします。
4. サーバーや攻撃に問題がないか確認してください。
Windows 2003 IIS6 の fastcgi 構成ファイル fcgiext.ini を最適化して、PHP-cgi.exe プロセスの数とメモリ サイズを削減します。
fastcgi の方が isapi よりも優れていると聞いたので、現在、構成環境は Windows 2003 IIS6 fastcgi (FCGI) PHP5.2.17 ですが、長時間観察した結果、FastCGI モードで動作する PHP はメモリをどんどん占有し、アクセス数が増加することがわかりました。 php-cgi プロセスはわずかに多くなります。さらに N 個あります。同じ状況では、isapi モードを使用する場合よりも数百 MB 多くなる可能性があります。私のサーバーには 2G のメモリしかなく、それを損なう余裕はありません。
オンラインで検索したところ、多くの人が同じ問題に直面していることがわかりました。 PHP 公式によるより正式な説明は次のとおりです: php-cgi プロセスにはメモリ リークはありません。php-cgi は各リクエストの最後にスクリプトによって使用されるすべてのメモリをリサイクルしますが、オペレーティング システムには解放しません。システムは継続しますが、次の PHP リクエストのために保留されます。これはおそらく、メモリの断片化を軽減するため、またはシステムからメモリを取得してからオペレーティング システムに解放するために必要な制御不能な時間を解決するために行われます。ただし、PHP リクエストが ftp や zlib などの大きなメモリ操作を偶然使用した場合、システム メモリの大きな部分が php-cgi によって継続的に占有され、使用できなくなります。
この問題の解決策は、Web サーバー構成の fastcgi 構成ファイルのパラメーターを最適化することです。
C:\WINDOWS\system32\inetsrv\fcgiext.ini ファイルで、次のような php-cgi プロセス関連のパラメータを設定できます。
[Types] php = PHP [PHP] ExePath=C:\php-5.3.8-nts-Win32-VC9-x86\php-cgi.exe maxInstances=100 InstanceMaxRequests=10000 EnvironmentVars=PHP_FCGI_MAX_REQUESTS:10000 RequestTimeout=600 ActivityTimeout=900
上記の構成では:
ExePath 指定了FastCGI解析程序的路径, instanceMaxRequests 指定了每个实例可以处理的最大请求数, maxInstances 指定可以启动的最大实例数目, EnvironmentVars 创建了一个环境变量 PHP_FCGI_MAX_REQUESTS ,默认值设为10000, requestTimeout 指定了请求的超时时间为600秒, activityTimeout 指定了活动会话超时时间为900秒。
次は推奨値です:
maxInstances=
この値をより小さい値に変更します
推奨事項
512M 内存的改maxInstances=50 1G 内存的改maxInstances=80 2G 内存的改maxInstances=140
もう一度変更します
InstanceMaxRequests=
この値を変更しますより小さい値に
提案
512M 内存的改InstanceMaxRequests=200 1G 内存的改InstanceMaxRequests=300 2G 内存的改InstanceMaxRequests=500
変更後、IISを再起動します。
instanceMaxRequests PHP_FCGI_MAX_REQUESTS これら 2 つのパラメータは、php-cgi プロセスの作成後に受け入れられる PHP リクエストの最大数を決定します。lighttpd のデフォルト設定は 10000 です。つまり、この php-cgi プロセスは、10,000 の PHP リクエストを受け入れるたびに終了し、すべてのメモリを解放し、管理プロセスによって再起動されます。たとえばこれを 100 に下げると、php-cgi の再起動サイクルが大幅に短縮され、偶発的な高メモリ操作によって引き起こされる問題の影響時間も短縮されます。
maxInstances このパラメータは、起動できるインスタンスの最大数、つまり php-cgi.exe プロセスの数を指定します。たとえばこれを 100 に下げると、タスク マネージャーのプロセスには最大でも php-cgi.exe プロセスのみが存在し、php-cgi.exe が占有する合計メモリが大幅に削減されます。
現在使用しているサーバーは、4G メモリを搭載した Windows 2003 オペレーティング システムです。php-cgi.exe プログラムは 7 ~ 25M のメモリを消費します。php の数を減らすために、maxInstances の値を 300 に調整しました。 -cgi.exe プロセスの合計数とメモリ使用量も削減され、応答速度も以前よりも大幅に向上しました。少なくとも調整量はサイトへのアクセス数に応じて決定できます。
以上がphp cgi.exeが多すぎる問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。