PHP-FPM 設定と mpm_worker (Apache) の関係

PHP-FPM 設定と mpm_worker (Apache) の関係

次のような設定で Magento を実行しているサイトがあります。

  • mpm_worker を使用した Apache 2.4
  • PHP-FPM
  • サーバーの合計 RAM: 14GB (Apache/PHP で 10GB 使用可能)

各 PHP-FPM プロセスは約 80 MB の RAM を消費します。

PHP-FPM と mpm_worker の設定を微調整したいのですが、ドキュメントを読んでいると、PHP-FPM と mpm_worker のオプションの関係が少しわかりません。

たとえば、PHP-FPMにはpm.min_spare_servers、、pm.max_spare_serversおよびpm.start_serversという構成がありますmax_children。PHP-FPM に関してこれらのオプションが何を意味するのか理解しています。

MinSpareThreadsただし、mpm_worker には、、、およびMaxSpareThreadsという 構成があります。ここでも、mpm_worker とは別に、それらが何をするのか理解しています。StartServersThreadLimit

私の質問は、これらの設定は互いにどのように関連しているのかということです。 と を設定したとしますStartServers=2ThreadsPerChild=25これにより、Apache/mpm_worker に関して最初に 50 個のスレッドが提供されます。 次に を設定するとpm.start_servers = 50、PHP-FPM は最初に 50 個のプロセスを生成します。

では、これら 50 個の「Apache」スレッドと 50 個の「PHP-FPM」プロセスの関係は何でしょうか? 各 Apache スレッドは 1 つの PHP-FPM プロセスを利用するのでしょうか?

誰かがこれについて何らかの洞察を与えてくれることを願っています。

ありがとう!

答え1

Apache は、スレッドの子を使用してクライアントからのリクエストに応答しますが、PHP ファイルに対してのみ PHP-FPM を呼び出します。画像、CSS、JS は Apache から直接提供されるため、PHP-FPM スレッドは消費されません。

PHP-FPM には子のない複数のスレッドがあり、各スレッドは Apache からのリクエストを処理します。

私の知る限り、Apache で KeepAlive が設定されていない場合、同じクライアントからの複数のリクエスト (ページ、画像、CSS、JS の読み込み) は複数のスレッドを消費するはずです。このリンクをご覧くださいKeepAlive の詳細については、こちらをご覧ください。

最近、自分で Apache サーバーを調整していたのですが、複数のコアがある場合はスレッドあたりの子の数を増やす方が良いことがわかりました。

答え2

関係は動的にマッピングされます。これらは別々のプロセスであり、別々のサーバーで実行することもできるため、構成オプションが豊富にあります。

Apache プロセス/スレッドは初期接続を処理し、その後 php-fpm プロセスを使用して PHP ファイルを解析し、リクエストを返します。

ここでは、どの設定をすべきかについてアドバイスする変数が多数用意されていますが、一般的には、リクエストをリアルタイムで処理するのに十分なスレッドを持つように Apache を設定し、PHP スクリプト/ウェブサイトが実行するために十分なメモリを持つように php-fpm を設定します。さまざまなキャッシュ オプションが考えられるため、これは実行中のシステムをベンチマークすることによってのみ決定できます。

関連情報