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を使用してフロントエンドとバックエンドを分離するサンプルコード
1. ElasticSearch とは何ですか? Elasticsearch も Java で開発さ...
nginx サーバーnginx は、静的ファイルの処理に非常に効率的な優れた Web サーバーです。...
MySQL 8.0.13 にはデフォルトでデータ フォルダがあります。このフォルダを削除する必要があ...
MySQL を使用してデータベースをクエリし、左結合を実行すると、関連付けられたフィールドの一部に...
目次イベントループmiscroTask (マイクロタスク) UI レンダリング (重要なポイント)次...
モバイル側では、フレックスレイアウトが非常に便利です。デバイスの幅に応じてコンテナの幅を自動的に調整...
まず解決策を見てみましょう #------------mysql の root ユーザーに権限を付与...
nginx でファイルサーバーを構築することもありますが、これは一般に公開されていますが、サーバーが...
以下の分析は製品設計原則に関するものですが、そのほとんどはウェブサイト製品に基づいているため、ユーザ...
ウェブサイトの構築を始めたばかりの初心者には、理解し、学ぶべきことがたくさんあります。ウェブサイトを...
この記事の例では、ログインインターフェース検証コードを実装するためのlayuiの具体的なコードを参考...
目次1. 魔法の拡張演算子1. 配列をコピーする2. 配列を結合する3. オブジェクトを展開する2....
1. 永続的な統計情報の重要性:統計は、MySQL が実行プランを生成するためのガイドとして使用され...
<br />このセクションでは、XHTML でテキストの書式設定と特殊文字を実装する方法...
目次1. Docker分散lnmpイメージ生成1. Nginx、MySQL、PHPコンテナを実行する...