ホームページ  >  記事  >  バックエンド開発  >  PHP 環境構成における CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI の比較_PHP チュートリアル

PHP 環境構成における CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI の比較_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:24:19696ブラウズ

CGIとは

CGI の正式名は「Common Gateway Interface」です。これは、HTTP サーバーが自分のマシンまたは他のマシン上のプログラムと「通信」するためのツールです。プログラムはネットワーク サーバー上で実行する必要があります。

CGIは、言語に標準入力、出力、環境変数がある限り、どの言語でも書くことができます。 php、perl、tclなど

FastCGIとは

FastCGI は長寿命 CGI のようなもので、アクティブ化されている限り、毎回フォークするのに時間がかかりません (これは CGI の最も批判的なフォーク実行モデルです)。 )。また、分散コンピューティングもサポートしています。つまり、FastCGI プログラムを Web サイト サーバー以外のホストで実行し、他の Web サイト サーバーからのリクエストを受け入れることができます。

FastCGI は、言語に依存しないスケーラブルなアーキテクチャの CGI オープン拡張機能であり、その主な動作は CGI インタープリター プロセスをメモリ内に保持し、より高いパフォーマンスを実現することです。ご存知のとおり、CGI インタープリタの繰り返しロードが CGI パフォーマンス低下の主な原因です。CGI インタープリタがメモリ内に残り、FastCGI プロセス マネージャーのスケジューリングを受け入れる場合、良好なパフォーマンス、スケーラビリティ、フェイルオーバー機能などが提供されます。

FastCGI と CGI 機能

1. CGI と同様に、FastCGI も言語に依存しません。

2. CGI や FastCGI などのインプロセス アプリケーションは、コア Web サーバーから独立して実行され、API よりも安全な環境を提供します。 (API はアプリケーションのコードをコア Web サーバーにリンクします。つまり、欠陥のある API を備えたアプリケーションは他のアプリケーションやコア サーバーに損害を与える可能性があります。悪意のある API のアプリケーション コードは別のアプリケーションを盗む可能性もあります。プログラムまたはコア サーバー キー)

3. FastCGI テクノロジーは現在、C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby などの言語をサポートしています。関連モジュールは、Apache、ISS、Lighttpd などの一般的なサーバーでも利用できます。

4. CGIと同様に、FastCGIはWebサーバーの内部アーキテクチャに依存しないため、サーバーテクノロジーが変わっても、FastCGIは安定しています。

FastCGIの仕組み
1. Webサーバーの起動時にFastCGIプロセスマネージャー(IIS ISAPIまたはApacheモジュール)をロードします

2. FastCGIプロセスマネージャーはそれ自体を初期化し、複数のCGIインタープリタープロセスを開始します(複数のphp- cgi) を実行し、Web サーバーからの接続を待ちます。

3. クライアントリクエストがWebサーバーに到達すると、FastCGIプロセスマネージャーがCGIインタープリターを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi に送信します。

4. FastCGI サブプロセスは処理が完了すると、同じ接続から Web サーバーに標準出力とエラー情報を返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、(Web サーバーで実行されている) FastCGI プロセス マネージャーからの次の接続を待機して処理します。 CGI モードでは、php-cgi はこの時点で終了します。

上記の場合、通常の CGI がどれほど遅いか想像できるでしょう。 PHP へのすべての Web リクエストでは、php.ini を再解析し、すべての拡張機能を再ロードし、すべてのデータ構造を再初期化する必要があります。 FastCGI では、これらすべてがプロセスの開始時に 1 回だけ行われます。さらに、永続的なデータベース接続が機能するという利点もあります。

FastCGIの欠点

マルチプロセスであるため、CGI マルチスレッドよりも多くのサーバー メモリを消費します。PHP-CGI インタープリタは、プロセスごとに 7 ~ 25 メガバイトのメモリを消費します。これを 50 倍または 100 倍すると、大量のメモリが得られます。


Nginx 0.8.46+PHP 5.2.14 (FastCGI) サーバーには 30,000 の同時接続があり、開始された 10 個の Nginx プロセスは 150M のメモリ (15M*10=150M) を消費し、開始された 64 個の php-cgi プロセスは 1280M のメモリ (20M) を消費します。 *64=1280M)、システム自体が消費するメモリを加えた合計メモリ消費量は 2GB 未満です。サーバーのメモリが小さい場合は、25 個の php-cgi プロセスしか開くことができないため、php-cgi によって消費される合計メモリはわずか 500M になります。

上記のデータは、Apache (バージョン 6) よりも 10 倍優れた Web サーバーを構築するための Nginx 0.8.x + PHP 5.2.13 (FastCGI) から抜粋したものです

PHP-CGIとは

PHP-CGI は PHP 独自の FastCGI マネージャーです。

PHP-CGIを起動し、次のコマンドを使用します。

コードをコピーします。 コードは次のとおりです。 php-cgi -b 127.0.0.1:9000

PHP-CGIの欠点

1. php-cgi が php.ini の設定を変更した後、新しい php-ini を有効にするために php-cgi を再起動する必要があります スムーズに再起動できません

2. php-cgi プロセスを直接強制終了すると、php は実行できなくなります。 (PHP-FPM と Spawn-FCGI にはこの問題はありません。デーモン プロセスは新しい子プロセスをスムーズに再生成します。)

PHP-FPMとは

PHP-FPM は PHP FastCGI マネージャーであり、PHP にのみ使用され、http://php-fpm.org/download からダウンロードできます。

PHP-FPMは実際にはPHPソースコードのパッチであり、FastCGIプロセス管理をPHPパッケージに統合することを目的としています。 PHP ソース コードにパッチを適用する必要があり、PHP をコンパイルしてインストールした後に使用できるようになります。

最新のPHP 5.3.2ソースツリーにPHP-FPMを直接統合したブランチがダウンロードできるようになりました。次のバージョンではPHPのメインブランチに統合される予定だそうです。 Spawn-FCGI と比較すると、PHP-FPM は CPU とメモリの制御が優れており、前者はクラッシュしやすく、crontab で監視する必要がありますが、PHP-FPM にはそのような問題はありません。

PHP5.3.3はphp-fpmを統合し、サードパーティパッケージではなくなりました。 PHP-FPM は、メモリとプロセスを効果的に制御し、PHP 設定をスムーズにリロードできる、より優れた PHP プロセス管理方法を提供します。そのため、spawn-fcgi よりも多くの利点があるため、PHP に正式に組み込まれています。 PHP-FPM を有効にするには、./configure で –enable-fpm パラメーターを渡します。

PHP-FPM を使用して PHP-CGI の FastCGI プロセスを制御します

コードをコピーします コードは次のとおりです:

/usr/local/php/sbin/php-fpm{start|stop|quit |restart|reload| logrotate}

--start phpのfastcgiプロセスを開始します
--stop phpのfastcgiプロセスを強制終了します
--quit phpのfastcgiプロセスをスムーズに終了します
--restart phpのfastcgiプロセスを再起動します
--reload php php.ini をスムーズにリロードします
--logrotate ログ ファイルを再度有効にします

Spawn-FCGI とは何ですか

Spawn-FCGI は、lighttpd の一部である、FastCGI モードでの管理作業を行うために Lighttpd の Spawn-FCGI を使用していますが、多くの欠点があります。 PHP-FPM の登場により、いくつかの問題は多少軽減されましたが、PHP-FPM には再コンパイルが必要になるという欠点があり、既に実行されている一部の環境ではかなりのリスクが生じる可能性があります (参照)。PHP 5.3.3 PHP で直接使用できます。 -FPM。

Spawn-FCGI は別個のプロジェクトになり、より安定し、多くの Web サイトの構成に利便性をもたらします。多くのサイトでは、動的 Web ページを解決するために、nginx と組み合わせています。

最新の lighttpd にはこの部分 (http://www.lighttpd.net/search?q=Spawn-FCGI) は含まれていませんが、以前のバージョンには含まれています。 lighttpd-1.4.15バージョン(http://www.lighttpd.net/download/lighttpd-1.4.15.tar.gz)に含まれています

Spawn-FCGI の現在のダウンロード アドレスは http://redmine.lighttpd.net/projects/spawn-fcgi で、最新バージョンは http://www.lighttpd.net/download/spawn-fcgi-1.6.3 です。 .tar.gz

注: 最新の Spawn-FCGI については、lighttpd.net Web サイトで「Spawn-FCGI」を検索して、最新バージョンのリリース アドレスを見つけることができます

これで、Spawn-FCGI を使用して、php-CGI の FastCGI プロセスを制御できるようになります

コードをコピーします コードは次のとおりです:

/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 5 -u www-data -g www-data -f /usr/bin/php-CGI

パラメータの意味は次のとおりです:

-f FastCGIを呼び出すプロセスの実行者の場所を指定し、システムにインストールされているPHPに従って設定します
-a アドレスaddrにバインド
-p ポートportにバインド
-s unixにバインド パス pathソケットの
-C 生成されるFastCGIプロセスの数を指定します。デフォルトは5です(PHPのみ)
-P 生成されるプロセスのPIDファイルパスを指定します
-uと-g FastCGIが使用するID(- u user-g ユーザーグループとして実行します)。Ubuntu では www-data を使用できます。その他は、nobody、Apache など、状況に応じて設定されます。

PHP-FPMとspawn-CGIの比較テスト

PHP-FPMは非常に使いやすく、設定はPHP-FPM.iniファイルにあり、php/sbin/PHP-FPMから起動と再起動が可能です。さらに便利なのは、php.ini を変更した後、PHP-FPM のリロードを直接使用して、プロセスを停止せずに php.ini の変更とロードを完了できることです。 PHP のパフォーマンスを向上させます。 PHP-FPM によって制御されるプロセスの CPU リサイクル速度は比較的遅く、メモリは均等に割り当てられます。


Spawn-FCGI によって制御されるプロセスの CPU はすぐに低下し、メモリ割り当ては比較的不均一になります。多くのプロセスは割り当てられていないように見えますが、他のプロセスは高度に占有されています。これは、プロセス タスクの不均等な分散によって引き起こされる可能性があり、これも全体的な応答速度の低下につながります。 PHP-FPM の適切な分散は、全体的な応答とタスクの平均につながります。

PHP-FPMとSpawn-FCGI関数の比較 http://php-fpm.org/about/

PHP-FPMとSpawn-FCGIはどちらもphp-cgiを保護するプロセスマネージャーです。

参考ドキュメント:

http://topic.csdn.net/u/20100216/22/5809e272-6f67-4248-bde9-99deeae5215b.html

http://topic.csdn.net/u/20101015/19/8ae74452-ec6b-448e -9942-21faeb008cd7.html

http://club.topsage.com/thread-768488-1-1.html
http://www.unixaid.info/index.php/productsapp/23-servsf/842-spawn -fcgi
http://www.fastcgi.com/drupal/node/2
http://baike.baidu.com/view/641394.htm
http://baike.baidu.com/view/32614.htm
http://blog.yation.com/network/fastcgi/

http://www.bkjia.com/PHPjc/324342.html

tru​​ehttp://www.bkjia.com/PHPjc/324342.html技術記事 CGI とは何ですか? CGI の正式名は「Common Gateway Interface」(共通ゲートウェイ インターフェイス) で、HTTP サーバーがプログラムまたは他のマシンと「通信」するためのツールです。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。