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を使用してフロントエンドとバックエンドを分離するサンプルコード
公式ドキュメント: https://nginx.org/en/linux_packages.html...
現象Dockerコンテナを起動する docker run –name [コンテナ名] [コンテナID...
MySQL 5.5 のインストールと構成のチュートリアル ノートを整理し、全員と共有します。 1.公...
目次1. 監視ポート関係の説明操作する2. 監視サービス関係の説明操作する3. テンプレートのインポ...
1. クエリを最適化するには、テーブル全体のスキャンを避けてください。まず、where と orde...
最近では、特定のフォルダ内の特定のファイルを自動的に検索する必要があり、ファイルパスとファイル名を別...
WindowsとLinux間のファイル転送(1)WinSCPを使用して、WindowsファイルをLi...
目次総合的な比較アクティブの観点から機能的な観点から詳細な比較1. エース2. コードミラー3. モ...
結合では、ネスト ループ結合アルゴリズムが使用されます。ネスト ループ結合には 3 つの種類がありま...
目次1. はじめに2. 使用方法3. 開発プロセス1. モデル例2. イベントとアニメーション4. ...
前面に書かれたコードがどれだけ適切に記述されていても、すべての可能性のある例外を完全に処理することは...
この読書ノートでは、主にファイルシステムに関連する操作を記録します。ディスクとディレクトリの容量ディ...
フロントエンドとバックエンドを分離した開発では、フロントエンドがバックエンドの API を呼び出して...
CSSでtext-align、margin: 0 autoを使用して中央揃えにするtext-alig...
マスタースレーブレプリケーションモードのクラスターでは、通常、1 つのマスターノードと 2 つ以上の...