首先,咱们关注下 PHP-FPM 的运行方式:php
static :表示在 `php-fpm` 运行时直接 `fork` 出 `pm.max_chindren` 个子进程, dynamic:表示,运行时 `fork` 出 `start_servers` 个进程,随着负载的状况,动态的调整,最多不超过 `max_children` 个进程。
通常推荐用 static
。并发
优势是不用动态的判断负载状况,提高性能;php-fpm
缺点是多占用些系统内存资源。性能
PHP-FPM
子进程数量,是否是越多越好?code
固然不是,pm.max_chindren
,进程多了,增长进程管理的开销以及上下文切换的开销。server
更核心的是,能并发执行的 php-fpm
进程不会超过 cpu
个数。进程
如何设置,取决于你的代码内存
若是代码是 CPU
计算密集型的,pm.max_chindren
不能超过 CPU
的内核数。资源
若是不是,那么将 pm.max_chindren
的值大于 CPU
的内核数,是很是明智的。requests
国外技术大拿给出这么个公式:
在 N + 20%
和 M / m
之间。
N 是 CPU 内核数量。
M 是 PHP 能利用的内存数量。
m 是每一个 PHP 进程平均使用的内存数量。
适用于 dynamic
方式。
static
方式:M / (m * 1.2)
固然,还有一种保险的方式,来配置 max_children
。适用于 static
方式。
max_childnren
设置成一个比较大的值。php-fpm
的 status
里的 max active processes
是多少max_children
配置比它大一些就能够了。pm.max_requests
:指的是每一个子进程在处理了多少个请求数量以后就重启。
这个参数,理论上能够随便设置,可是为了预防内存泄漏的风险,仍是设置一个合理的数比较好。