fastcgiとfpmの違いは何ですか?


117

私はmacportsにfpmでphpをインストールしようとしています。fpmがFastCGIプロセスマネージャを意味することをどこかで読みました。それはfastcgiとfpmが同じであることを意味しますか?それらが同じである場合、なぜphp用の2つの異なるmacportsバリアント、つまり 「php5 + fastcgi」「php5 + fpm」があるのですか

回答:


94

FPMは、PHPでFastCGI SAPI(サーバーAPI)を管理するためのプロセスマネージャーです。

基本的に、これはSpawnFCGIなどの必要性を置き換えます。これは、FastCGIの子を適応的に生成します(つまり、現在の負荷で必要な場合はさらに起動します)。

それ以外の場合、FastCGIとの動作に大きな違いはありません(要求の開始から終了までの要求パイプラインは同じです)。それはそれを簡単に実装できるようにするためだけにあります。


8
php-fpmの主な利点は、1つのAPCキャッシュを複数のプロセスで共有できることです。fcgidでは、APCキャッシュはプロセスごとです。fpmを使用すると、メモリを大幅に節約できます。これにより、節約したメモリを使用して、より多くのプロセスを生成し、より多くのトラフィックを処理できます。
cam8001 2013年

25
@ cam8001:それは完全に真実ではありません。SpawnFCGIスポーンするプロセスの数、およびプロセスごとのPHPの子の数を設定できます。つまり、100個の子を持つ1つのPHPプロセスを生成することは、100個の子を持つFPMを使用することと同じです...しかし、その逆は当てはまります。FPMが停止すると(segfaultなど)、ワーカー全体が死亡します。SpawnFCGIでは、プロセスの1つが停止しても、残りのプロセスは存続する可能性があります。そのため、明確なものではありません。異なるアプローチ。FPMは、技術的な理由ではなく、(実際には)コアと一緒に維持されるため推奨されます...
ircmaxell

56

アンソニーの言うことは完全に正しいですが、私はあなたの経験がおそらくはるかに優れたパフォーマンスと効率を示すことを付け加えたいと思います(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


8
そのような問題は周りにありますか(2017年4月)?
ロー卿。

1
使用したlighttpdとfpmのバージョンに関する更新をお勧めします。まだ表示されている問題(2018年6月)の更新もコミュニティに役立ちます。
Ima

0

PHPをCGIとして実行するということは、基本的にWebサーバーにPHP実行可能ファイルの場所を伝え、サーバーがその実行可能ファイルを実行することを意味します。

一方

PHP FastCGIプロセスマネージャー(PHP-FPM)は、Webサイトが激しい負荷を処理できるようにするPHPの代替FastCGIデーモンです。PHP-FPMは、これを実現するためのプール(PHP要求に応答できるワーカー)を維持します。PHP-FPMは、マルチユーザーPHP環境向けに、SUPHPなどの従来のCGIベースのメソッドよりも高速です。

ただし、どちらにも長所と短所があり、特定のユースケースに従って選択する必要があります。

fastcgiとfpmのこのリンクの情報は、私のシナリオで使用するハンドラーを選択するのに非常に役立ちました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.