私はmacportsにfpmでphpをインストールしようとしています。fpmがFastCGIプロセスマネージャを意味することをどこかで読みました。それはfastcgiとfpmが同じであることを意味しますか?それらが同じである場合、なぜphp用の2つの異なるmacportsバリアント、つまり 「php5 + fastcgi」と 「php5 + fpm」があるのですか。
私はmacportsにfpmでphpをインストールしようとしています。fpmがFastCGIプロセスマネージャを意味することをどこかで読みました。それはfastcgiとfpmが同じであることを意味しますか?それらが同じである場合、なぜphp用の2つの異なるmacportsバリアント、つまり 「php5 + fastcgi」と 「php5 + fpm」があるのですか。
回答:
FPMは、PHPでFastCGI SAPI(サーバーAPI)を管理するためのプロセスマネージャーです。
基本的に、これはSpawnFCGIなどの必要性を置き換えます。これは、FastCGIの子を適応的に生成します(つまり、現在の負荷で必要な場合はさらに起動します)。
それ以外の場合、FastCGIとの動作に大きな違いはありません(要求の開始から終了までの要求パイプラインは同じです)。それはそれを簡単に実装できるようにするためだけにあります。
SpawnFCGI
スポーンするプロセスの数、およびプロセスごとのPHPの子の数を設定できます。つまり、100個の子を持つ1つのPHPプロセスを生成することは、100個の子を持つFPMを使用することと同じです...しかし、その逆は当てはまります。FPMが停止すると(segfaultなど)、ワーカー全体が死亡します。SpawnFCGIでは、プロセスの1つが停止しても、残りのプロセスは存続する可能性があります。そのため、明確なものではありません。異なるアプローチ。FPMは、技術的な理由ではなく、(実際には)コアと一緒に維持されるため推奨されます...
アンソニーの言うことは完全に正しいですが、私はあなたの経験がおそらくはるかに優れたパフォーマンスと効率を示すことを付け加えたいと思います(fpm
-vs-ではfcgi
なく、より多くのの実装のためhttpd
)。
例えば、私が実行しているクアッドコアマシンたlighttpd
+ fcgi
きれいに沿って鼻歌を。成長に対応するために16コアマシンにアップグレードすると、RAMの使用状況とセグメンテーションフォールトの2つが爆発しました。私は自分lighttpd
がウェブサイトを維持するために30分ごとに再起動することに気づきました。
php-fpmとnginxに切り替えたところ、RAMの使用量が> 20GBから2GBに減少しました。セグフォルトも消えた。いくつかの調査を行った後、lighttpdとfcgiは負荷のかかったマルチコアマシンではうまく機能せず、特定のインスタンスでメモリリークの問題があることを知りました。
これはphp-fpm
より優れているためfcgi
ですか?ない完全に、しかしどのようにあなたがにフックすることはphp-fpm
、あなたが経由でサーブする方法よりも効率的な全体のheckuvaロットのようですfcgi
。
PHPをCGIとして実行するということは、基本的にWebサーバーにPHP実行可能ファイルの場所を伝え、サーバーがその実行可能ファイルを実行することを意味します。
一方
PHP FastCGIプロセスマネージャー(PHP-FPM)は、Webサイトが激しい負荷を処理できるようにするPHPの代替FastCGIデーモンです。PHP-FPMは、これを実現するためのプール(PHP要求に応答できるワーカー)を維持します。PHP-FPMは、マルチユーザーPHP環境向けに、SUPHPなどの従来のCGIベースのメソッドよりも高速です。
ただし、どちらにも長所と短所があり、特定のユースケースに従って選択する必要があります。
fastcgiとfpmのこのリンクの情報は、私のシナリオで使用するハンドラーを選択するのに非常に役立ちました。