ホームページ バックエンド開発 PHPチュートリアル CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI とは何ですか? (変化)

CGI、FastCGI、PHP-CGI、PHP-FPM、Spawn-FCGI とは何ですか? (変化)

Jun 23, 2016 pm 02:29 PM

CGI とは何ですか?

CGIの正式名称は「Common Gateway Interface」です。簡単に言えば、WEBサーバー上で動作するプログラムです。ブラウザからの入力によってトリガーされるこのスクリプトは、通常、サーバーとシステム内の他のプログラム (データベースなど) の間のブリッジとして機能します。

CGI スクリプトの仕組み: ブラウザーは、HTML フォームまたはハイパーリンクを通じて、前の CGI アプリケーションを指す URL を要求します。 サーバーはリクエストを受信します。 サーバーは指定された CGI アプリケーションを実行します。 CGI アプリケーションは、通常、ビューアからの入力に基づいて、必要な操作を実行します。 CGI アプリケーションは、結果を Web サーバーやブラウザが理解できるドキュメント (通常は HTML ページ) にフォーマットします。 Web サーバーは結果をブラウザに返します。

FastCGI とは

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

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

FastCGI と CGI の機能:

CGI と同様に、FastCGI は言語に依存せず、コア Web サーバーから独立したプロセスでアプリケーションを実行し、API よりも安全な環境を提供します。 (API はアプリケーションのコードをコア Web サーバーにリンクします。つまり、欠陥のある API を備えたアプリケーションが他のアプリケーションやコア サーバーに損害を与える可能性があります。悪意のある API のアプリケーション コードは、別のアプリケーションを盗む可能性さえあります。プログラムまたはコア サーバーのキー。) 現在の FastCGI テクノロジーサポート言語: C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby など。関連モジュールは、Apache、ISS、Lighttpd などの一般的なサーバーでも利用できます。 CGI と同様、FastCGI は Web サーバーの内部アーキテクチャに依存しないため、サーバー テクノロジが変わっても、FastCGI は安定したままになります。

FastCGI の仕組み:

Web サーバーが起動すると、FastCGI プロセス マネージャー (IIS ISAPI または Apache モジュール) がロードされ、FastCGI プロセス マネージャー自体が初期化され、複数の CGI インタープリター プロセス (複数の php-cgi が表示されます) からのリクエストを待ちます。 Web サーバー接続。 クライアント要求が Web サーバーに到達すると、FastCGI プロセス マネージャーが CGI インタープリターを選択して接続します。 Web サーバーは、CGI 環境変数と標準入力を FastCGI サブプロセス php-cgi に送信します。 FastCGI サブプロセスは処理を完了すると、同じ接続から標準出力とエラー情報を Web サーバーに返します。 FastCGI 子プロセスが接続を閉じると、リクエストが処理されます。次に、FastCGI 子プロセスは、(Web サーバーで実行されている) FastCGI プロセス マネージャーからの次の接続を待機して処理します。 CGI モードでは、php-cgi はこの時点で終了します。

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

FastCGI のデメリット

マルチプロセスなので、CGI マルチスレッドよりも多くのサーバーメモリを消費します。この数値を 50 または 100 倍すると、PHP-CGI インタプリタは 1 プロセスあたり 7 ~ 25 メガバイトのメモリを消費します。メモリの数が非常に多い。

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 Manager に付属する FastCGI。 PHP-CGI を起動し、次のコマンドを使用します:

php-cgi -b 127.0.0.1:9000
ログイン後にコピー

PHP-CGI の欠点

php-cgi php.ini 設定を変更した後、新しい php-ini を有効にするために php-cgi を再起動する必要があります。 . php-cgi プロセスを直接強制終了するとスムーズに再起動できなくなり、php が実行できなくなります。 (PHP-FPM と Spawn-FCGI にはこの問題はありません。デーモン プロセスは新しい子プロセスをスムーズに再生成します。)

PHP-FPM とは

PHP-FPM は、PHP でのみ使用される PHP FastCGI マネージャーです。 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官方收录了。在./configure的时候带 ?enable-fpm参数即可开启PHP-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 重新启用log文件
ログイン後にコピー

什么是Spawn-FCGI

  Spawn-FCGI是一个通用的FastCGI管理服务器,它是lighttpd中的一部份,很多人都用Lighttpd的Spawn-FCGI进行FastCGI模式下的管理工作,不过有不少缺点。而PHP-FPM的出现多少缓解了一些问题,但PHP-FPM有个缺点就是要重新编译,这对于一些已经运行的环境可能有不小的风险(refer),在php 5.3.3中可以直接使用PHP-FPM了。

  Spawn-FCGI目前已经独成为一个项目,更加稳定一些,也给很多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来控制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 socket的路径path  -C 指定产生的FastCGI的进程数,默认为5(仅用于PHP)  -P 指定产生的进程的PID文件路径  -u和-g FastCGI使用什么身份(-u 用户 -g 用户组)运行,Ubuntu下可以使用www-data,其他的根据情况配置,如nobody、apache等
ログイン後にコピー

 

 

PHP-FPM与spawn-CGI对比测试

  PHP-FPM的使用非常方便,配置都是在PHP-FPM.ini的文件内,而启动、重启都可以从php/sbin/PHP-FPM中进行。更方便的是修改php.ini后可以直接使用PHP-FPM reload进行加载,无需杀掉进程就可以完成php.ini的修改加载。结果显示使用PHP-FPM可以使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/

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

LaravelのバックエンドでReactアプリを構築する:パート2、React LaravelのバックエンドでReactアプリを構築する:パート2、React Mar 04, 2025 am 09:33 AM

これは、LaravelバックエンドとのReactアプリケーションの構築に関するシリーズの2番目と最終部分です。シリーズの最初の部分では、基本的な製品上場アプリケーションのためにLaravelを使用してRESTFUL APIを作成しました。このチュートリアルでは、開発者になります

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

Laravelの通知 Laravelの通知 Mar 04, 2025 am 09:22 AM

この記事では、Laravel Webフレームワークの通知システムを検討します。 Laravelの通知システムを使用すると、さまざまなチャネルでユーザーに通知を送信できます。今日は、通知ovを送信する方法について説明します

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

See all articles