web-dev-qa-db-ja.com

PHP5-FPMと「オンデマンド」

NginxとPHP5-FPMを使用してサーバーをセットアップしましたが、正常に動作しています。ただし、サーバーにサイトを追加するにつれて、メモリ使用量が着実に増加していることがわかり、PHP5-FPMが「責任」であるという結論に達しました。

私が現在行っているのは、サイトごとに個別のPHP5-FPMプールを設定し、予想されるトラフィックに応じてそのプールを構成することです。ただし、十分な数のサイトがあれば、最終的には、仕事を待っているかなりの数のPHP5-FPM「子」だけで構成されるサーバーができあがります。

ondemand PHP5-FPMモードについて知りました。このモードでは、子プロセスが実際に必要な場合にのみフォークされ、一定期間存続するようにPHP5-FPMを構成できます。処理する。

しかし、私はこれについてあまり詳細を見つけることができません。私が最も興味を持っているのは、変数pm.max_childrenおよびpm.max_requestsondemandモードにどのように影響するかです(あるとしても)。変数pm.start_serverspm.min_spare_serverspm.max_spare_serversondemandモードには適用されないと思います。

4
sbrattla

そうです、start_servers、min_spare_servers、max_spare_serversはオンデマンドモードには適用されません。次の変数は、オンデマンドモードに適用される変数です。

  • pm.max_children
  • pm.process_idle_timeout
  • pm.max_requests

Pm = ondemandを設定すると、FPMは必要なときにすぐに子をフォークし、常に子の数をpm.max_children以下に保つため、この変数は同時にフォークされる子の数の上限になります。

他の2つの変数を使用すると、子を破棄する必要がある時期を指定できます。

  • pm.process_idle_timeoutは、子供が仕事なしで破壊されるまで待機する時間を設定します。秒単位で定義されます。

  • pm.max_requestsは、子が破棄される前に処理するリクエストの数(一度に1つ)を定義します。たとえば、この変数に値50を設定すると、子は50の要求を処理し、それ自体を閉じます。 FPMマスタープロセスにまだ別の子が必要な場合は、新しい子をフォークします。

私の会社では、FPMでオンデマンドモードを使用し、pm.max_requestsを使用してfpmの子のリサイクルを強制し、メモリ使用量が多くなるのを回避しています。

お役に立てれば、

ご挨拶。

11
Juan Traverso

このバグの可能性があります https://bugs.php.net/bug.php?id=72935

TLDR;子でaccept()が発生する前に、2つのクライアントが同じUNIXソケットでオンデマンドモードでPHP-FPMに接続すると、1つだけがaccept()されます。

1
J. Nick Koston