私はいくつかの調査を行い、これがpm.max_children値を計算および調整するためにこれを見つけました
https://myshell.co.uk/blog/2012/07/adjusting-child-processes-for-php-fpm-nginx/
しかし、例えば:
これを適用すると:
pm.max_children = Total RAM Webサーバー専用/最大子プロセスサイズ
だから私の場合:
pm.max_children = 5120/80 = 64
しかし、各php-fpm Webサイトのconfファイルにpm.max_children = 64を追加すると、すべてのWebサイトが64個の子プロセスX1プロセスのサイズ(ex 40mb)= 2560Mb
そして、同時に、30のすべてのWebサイトがpm.max_children値に達したと想像すると、次のようになります。2560Mb(Webサイトあたりの最大数) x30Webサイト=76 800Mb
私は正しいですか?
そうです、これは多くのWebサイトが同じサーバーでホストされている場合、計算の結果を分割する必要があることを意味しますpm.max_children = 5120/80= 64ホストされているWebサイトの数(ここでは30)。
したがって、64/30 = 2,1およびpm.max_children = 2Webサイトごと
正しいですか?
ありがとう
あなたの計算は私が集めたものから正しいです。
同じサーバー上に多くのWebを配置することは、すべてのWebが同時にすべての使用可能なリソースを使用するわけではない場合にのみ機能します。これは、人々が通常オーバープロビジョニングと呼ぶものです。
ただし、使用可能なRAMを中心に単純にpm.max_children
を計算するのではなく、Webが適切に機能するために実際に必要なワーカーの数を計算することをお勧めします。より低いものから始めて、php-fpm.log
を監視します。 max_children
設定に達した場合は、ログでそれを見つけ、増やすことができます。
また、PHPワーカーは必要なだけ存続することを確認してください。たとえば、次の構成では、プールで最大32 PHPリクエストのバーストがありますが、各ワーカーは非アクティブ状態が3秒続くと終了し、貴重なRAMを解放します。
pm = ondemand
pm.max_children = 32
pm.process_idle_timeout = 3s
RAMが少ない場合は、ondemand
プロセスマネージャを使用します。 dynamic
pmより少し遅いですが、非アクティブなWebサイトのRAMを無駄にしません。
PHPプロセスの総数を制御したい場合は、process.max
にphp-fpm.conf
という設定があります。私はこれを使用したことがありませんが、私には思われますこれを使用して、プールの構成方法に関係なく、ワーカーの数が特定の数を超えないようにすることができます。
ちなみに、別のユーザーに属する別のWebには別のプールを使用することをお勧めします。これにより、ユーザー権限や他のWebからキャッシュされたデータに問題が発生しなくなります。
私たちの経験に基づいたアドバイスしかできません。
リソース(CPUとRAM)を共有するために実行されているPHP-FPMプールは1つだけです。
複数のプールは、異なるユーザーアカウント(www-data1、www-data2など)を許可し、アクセスを制限するのに役立ちます。さらに、必要に応じて、CPUとRAM消費量)に異なる値を割り当てることができます。
ただし、次の例では1つのプールのみを使用しています。
; www.conf
;
; set pool management to have a fixed number of php workers
pm = static
; number of php processes (6 processes per CPU core)
pm.max_children = 48
静的プール管理の使用をお勧めします。つまり、PHPワーカーの数は常に一定です。
; www.conf
;
; redirect worker stdout and stderr into main error log
catch_workers_output = yes
これは、アプリケーションでエラーが発生した場合に役立ちます。
; php-fpm.conf
;
emergency_restart_threshold = 10
emergency_restart_interval = 1m
process_control_timeout = 10s
これは、実行中のPHPワーカーの基本的なライフモニタリングです。
これらの変更後、PHP-FPMサービスを再起動することを忘れないでください。