Solución:
Su cálculo es correcto por lo que he recopilado.
Tener muchas webs en el mismo servidor solo funciona siempre que no todas las web usen todos los recursos disponibles al mismo tiempo. Esto es lo que la gente suele llamar sobreaprovisionamiento.
Sin embargo, sugiero no calcular simplemente pm.max_children
alrededor de la RAM disponible, pero alrededor de cuántos trabajadores son realmente necesarios para que las web funcionen correctamente. Comience con algo más bajo y controle el php-fpm.log
. Si el max_children
se alcanza el ajuste, lo encontrará en el registro y puede aumentarlo.
Además, asegúrese de que los trabajadores PHP solo vivan el tiempo que sea necesario. Por ejemplo, la siguiente configuración permitirá que un grupo use hasta 32 trabajadores PHP si hay una ráfaga de solicitudes, pero cada trabajador saldrá después de 3 segundos de inactividad y liberará RAM valiosa:
pm = ondemand
pm.max_children = 32
pm.process_idle_timeout = 3s
Utilizar el ondemand
administrador de procesos si tiene poca RAM. Es un poco más lento que el dynamic
pm, pero no desperdicia RAM para sitios web inactivos.
Si desea controlar el número total de procesos PHP, existe una configuración llamada process.max
en php-fpm.conf
. Nunca lo he usado, pero me parece que podría usarlo para asegurarse de que nunca haya más de un cierto número de trabajadores, independientemente de cómo estén configurados los grupos.
Por cierto, es una muy buena idea usar grupos separados para webs separadas que pertenezcan a usuarios separados. De esa forma no tendrás problemas con los permisos de usuario o con los datos almacenados en caché de otras webs.