6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

結局php-fpmってなに?

Posted at

FPMってなんの略

たぶん初学者がPHPでなにか開発したい、そうだdockerだとなったときにまず出てくるこの言葉。いったいなんなのでしょうか。よくわからずに使ってる人も多いとは思いますが、最初にこのFPMとはなんの略でしょうか。

FastCGI Process Manager

そこで疑問が、FastCGIって何?

そもそもCGIって何?

Common Gateway Interface

HTMLはあくまで文書です。ですので動的に画面上の数字を変えたり表示される画像を変更したりはHTML単体ではできません。HTML単体ではできることはだいぶ限られてきます。

やっぱり動的にやりたいじゃないですか。商品をカートに追加するとか、購入ボタンぽちーって押したら購入完了になるとか。

そこで登場するのがCGI
込み入った話はともかくとして、WEBサーバ側から何かしらのプログラムを呼び出して実行した結果を返す仕組みのことをCGIといいます。

ただCGIには問題があって・・・

  1. リクエストごとにCGIプロセスを立ち上げる必要がある
    1. つまり毎回CPUリソースを消費するんです
    2. プロセス立ち上げるのは思ってる以上にCPUリソースが必要なのです
  2. アクセス数が多いサイトだと、CPU負荷が上がって死ねる
  3. apacheモジュールだと、apacheの再起動するときに気をつけないといけない

image.png

この問題を解決したのがFastCGIです

FastCGIでは

  1. FastCGIサーバがCGIプロセスを管理する
  2. プロセスを毎回立ち上げない
  3. 一度上げたプロセスはしばらくおいておく
  4. プロセス立ち上げの負荷が抑えられる
  5. WEBサーバと分離してるのでアプリケーションサーバだけ立ち上げ直すということが可能

WEBサーバとは別のFastCGIサーバ(アプリケーションサーバ)がこの管理をするのでWEBサーバはユーザからのアクセス処理に専念できるというわけです。

FPMはFastCGIのPHP実装ということです

つまるところFPMはphpをFastCGIとして実行するためのアプリケーションサーバということです。
phpはスレッドではなくてプロセスで処理されるためにCGIの仕組みそのものと言っても過言ではないですが、このphp-fpmを利用することでまるでマルチスレッドで動いているかのような振る舞いができます。

image.png

終わりに

FPMは高負荷時で普通にやったら遅くなるPHPを効率よく実行するための仕組みです。

6
3
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?