NginxとPHP5-FPMを使用してサーバーをセットアップしましたが、正常に動作しています。ただし、サーバーにサイトを追加するにつれて、メモリ使用量が着実に増加していることがわかり、PHP5-FPMが「責任」であるという結論に達しました。
私が現在行っているのは、サイトごとに個別のPHP5-FPMプールを設定し、予想されるトラフィックに応じてそのプールを構成することです。ただし、十分な数のサイトがあれば、最終的には、仕事を待っているかなりの数のPHP5-FPM「子」だけで構成されるサーバーができあがります。
ondemand PHP5-FPMモードについて知りました。このモードでは、子プロセスが実際に必要な場合にのみフォークされ、一定期間存続するようにPHP5-FPMを構成できます。処理する。
しかし、私はこれについてあまり詳細を見つけることができません。私が最も興味を持っているのは、変数pm.max_childrenおよびpm.max_requestsがondemandモードにどのように影響するかです(あるとしても)。変数pm.start_servers、pm.min_spare_servers、pm.max_spare_serversはondemandモードには適用されないと思います。
そうです、start_servers、min_spare_servers、max_spare_serversはオンデマンドモードには適用されません。次の変数は、オンデマンドモードに適用される変数です。
Pm = ondemandを設定すると、FPMは必要なときにすぐに子をフォークし、常に子の数をpm.max_children以下に保つため、この変数は同時にフォークされる子の数の上限になります。
他の2つの変数を使用すると、子を破棄する必要がある時期を指定できます。
pm.process_idle_timeoutは、子供が仕事なしで破壊されるまで待機する時間を設定します。秒単位で定義されます。
pm.max_requestsは、子が破棄される前に処理するリクエストの数(一度に1つ)を定義します。たとえば、この変数に値50を設定すると、子は50の要求を処理し、それ自体を閉じます。 FPMマスタープロセスにまだ別の子が必要な場合は、新しい子をフォークします。
私の会社では、FPMでオンデマンドモードを使用し、pm.max_requestsを使用してfpmの子のリサイクルを強制し、メモリ使用量が多くなるのを回避しています。
お役に立てれば、
ご挨拶。
このバグの可能性があります https://bugs.php.net/bug.php?id=72935
TLDR;子でaccept()が発生する前に、2つのクライアントが同じUNIXソケットでオンデマンドモードでPHP-FPMに接続すると、1つだけがaccept()されます。