Seu cálculo está correto pelo que eu entendi.
Ter muitas Webs no mesmo servidor funciona somente enquanto nem todas as Webs usam todos os recursos disponíveis ao mesmo tempo. Isso é o que as pessoas geralmente chamam de provisionamento excessivo.
No entanto, sugiro não simplesmente calcular pm.max_children
em torno da RAM disponível, mas em torno de quantos trabalhadores são realmente necessários para que as redes funcionem corretamente. Comece com algo menor e monitore o php-fpm.log
. Se a configuração max_children
for atingida, você a encontrará no log e poderá aumentá-la.
Além disso, certifique-se de que os funcionários do PHP só vivam o tempo que for necessário. Por exemplo, a configuração a seguir permitirá que um pool use até 32 operadores PHP se houver um burst de solicitações, mas cada worker sairá após 3 segundos de inatividade e liberará RAM valiosa:
pm = ondemand
pm.max_children = 32
pm.process_idle_timeout = 3s
Use o gerenciador de processo ondemand
se você estiver com pouca memória RAM. É um pouco mais lento que o dynamic
pm, mas não desperdiça RAM para sites inativos.
Se você quiser controlar o número total de processos do PHP, existe uma configuração chamada process.max
in php-fpm.conf
. Eu nunca usei, mas parece-me que você poderia usá-lo para garantir que nunca haja mais do que um certo número de trabalhadores, independentemente de como os pools estão configurados.
A propósito, é uma boa idéia usar pools separados para webs separadas pertencentes a usuários separados. Dessa forma, você não terá problemas com permissões de usuário ou com dados armazenados em cache de outras Webs.