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 によって継続的に占有され、使用できなくなります。 C:\WINDOWS\system32\inetsrv\fcgiext.ini ファイルでは、次のような php-cgi プロセス関連のパラメータを設定できます。
上記の構成では、 ExePath は FastCGI パーサーのパスを指定します。 提案
再度修正 提案
変更後、IIS を再起動します。 instanceMaxRequests PHP_FCGI_MAX_REQUESTS これら 2 つのパラメータは、php-cgi プロセスが作成後に受け入れることができる PHP リクエストの最大数を決定します。lighttpd のデフォルト設定は 10000 です。つまり、この php-cgi プロセスは 10,000 件の PHP リクエストを受信すると終了し、すべてのメモリを解放し、管理プロセスによって再起動されます。これを、たとえば 100 に下げると、php-cgi の再起動サイクルが大幅に短縮され、時折発生する高メモリ操作によって発生する問題の影響時間も短縮されます。 Win2008 サーバー、fastCGI の完璧な設定チュートリアルWIN2008 の IIS7 上で FASTCGI を使用して PHP-CGI.EXE を呼び出す場合、デフォルトではプロセスが 4 つしかありません。トラフィック量の多い Web サイトの場合、プロセス数の不足によるプロセス キューイングは非常に深刻です。解決策は次のとおりです。 32 ビット システム http://www.iis.net/Downloads/files/AdminPack/TP2/AdminPack_x86.msi 以下のツールをダウンロードし、以下のようにインストールしてください。 に追加 PHP_FCGI_MAX_REQUESTS = 10000 追加後、IIS を再起動せずにプロセス マネージャーで効果を確認できます。 設定値には達していないようですが、Webサイトを閲覧するとパフォーマンスの向上は明らかです。 メモリ使用量~~ 実際、Microsoft システムの欠点の 1 つは、クライアントなどのユーザー アプリケーションに十分なメモリを残すのではなく、サーバーのメモリ使用量をサービスによって最大限に使用しなければならないことです。 次の 2 つのパラメータを設定する価値があることをお知らせします。 InstanceMaxRequests: fastcgi プロセス (php-fcgi.exe) が処理できるリクエストの最大数。制限を超えるとリサイクルされます。デフォルト値は 200 です。 PHP_FCGI_MAX_REQUESTS: PHP自体が制御するリクエストの最大数。デフォルトは500です。 fastcgi を使用して cgi を実行する場合、php 自体でリクエストの最大数を制限することは絶対に望ましくありません。 ! したがって、PHP 自体がプロセスをリサイクルする機会がないように、InstanceMaxRequests が PHP_FCGI_MAX_REQUESTS 以下であることを確認してください。 マイクロソフトが何と言ったか見てみましょう:
サーバー上の php-cgi.exe プロセスが多すぎて CPU 使用率が 100% になる問題の解決策IIS サーバーを使用する場合、php-cgi.exe プロセスが多すぎることが多く、CPU が 100% 占有され、最終的には Web サイトの実行速度が低下したり、フリーズしたりします。IIS を再起動するとしばらくは問題ありませんが、しばらくするとこの状況が再発します。なぜこのようなことが起こるのでしょうか。また、どのように解決すればよいのでしょうか。最初は、常に手動で php-cgi プログラムを終了していました。一時的には問題を解決できますが、長期的な解決策ではありません。Baidu で検索したところ、この問題は一般的にプログラムの問題であることがわかりました。たとえば、プログラムが fastcgi を使用して PHP を実行し、プログラムによって設定された StartProcesses が 6 以上と大きすぎるなどです。以下は、サーバーの cup% を引き起こす過剰な php-cgi.ext の問題に対する私の解決策です。お役に立てば幸いです。ほとんどの場合、この問題は 4 番目の項目で発生します。 ソリューション参照: 1. システムディスクの容量を確認します。システム内に一時ファイルが多すぎないか確認してください。MySQL データベースの一時ファイルはデフォルトで c:/windows/temp に保存されるため、数万または数百万の小さなファイルが蓄積され、システム ディスクが圧迫されます。
上記のコマンドが十分でない場合は、次のコードを使用できます。
2. PHP は広く使用されている動的スクリプト言語ですが、IIS には PHP 言語の組み込みサポートがないため、PHP を使用する必要がある場合は自分でインストールする必要があります。 PHP は CGI モードまたは ISAPI モードでインストールできます。ISAPI モードの方がパフォーマンスが高いため、ISAPI モードを使用することをお勧めします。 3. プログラムを変更できる場合は、プログラム構成ファイルの StartProcesses 値を 2 に減らして、状況が改善されるかどうかを確認することをお勧めします。 4. サーバーに問題がないか、攻撃現象が発生していないかを確認します。 以下もご興味があるかもしれません:
|
<<: HTML入門チュートリアル HTMLタグ記号をすぐにマスター
>>: FastApi+Vue+LayUIを使用してフロントエンドとバックエンドを分離するサンプルコード
この記事では、例を使用して、MySQL の継続的な集計の原理と使用方法を説明します。ご参考までに、詳...
HTML 入力属性値属性value 属性は、入力フィールドの初期値を指定します。 <フォーム...
ホスト名を変更する場合は、以下の手順に従ってください。ホスト名の使用hostnameコマンドを使用す...
1. ユーザーを追加します。まず、adduser コマンドを使用して共通ユーザーを追加します。コマン...
jsx/tsxファイルを直接作成できます今回のプロジェクト構成は以下のとおりです。 vueファイルで...
1. 説明MySQLでは、テーブル内の行の総数を取得する必要がある場合、通常は次の文を使用します。 ...
MySQL 運用上の問題点を記録します。ビジネスシナリオと問題の説明外部インターフェースをリクエスト...
序文これまでにも、一部の SQL ステートメントを不適切に使用すると MySQL インデックスが失敗...
目次1. ソースコード1.1 モノレポ1.2 タイプスクリプト2. パフォーマンス2.1 ソースコー...
Fabric.js は非常に便利なキャンバス操作プラグインです。ここでは、日常のプロジェクトで使用さ...
雇用主から MySQL クエリ条件でインデックスが使用されるかどうかを尋ねられた場合、どのように答え...
CSSフィルターを使用してマウスオーバー効果を記述する <div class="fi...
この記事では、MySQL トリガーの定義と使用方法について説明します。ご参考までに、詳細は以下の通り...
Win10 システムをインストールしていて、k8s クラスターを構築する場合、Win10 に付属する...
目次Vue CLIはVueプロジェクトを構築しますVue プロジェクトをマークダウン エディターに変...