php-fpm 根据服务器内存 进行进程数设置

 

以下为官方文档内容:

pm string

设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。

static - 子进程的数量是固定的(pm.max_children)。

ondemand - 进程在有需求时才产生(当请求时才启动。与 dynamic 相反,在服务启动时 pm.start_servers 就启动了。

dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。

pm.max_children int

pm 设置为 static 时表示创建的子进程的数量,pm 设置为 dynamic 时表示最大可创建的子进程的数量。必须设置。

该选项设置可以同时提供服务的请求数限制。类似 Apache 的 mpm_prefork 中 MaxClients 的设置和 普通PHP FastCGI中的 PHP_FCGI_CHILDREN 环境变量。

pm.start_servers in

设置启动时创建的子进程数目。仅在 pm 设置为 dynamic 时使用。默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2。

pm.min_spare_servers int

设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.max_spare_servers int

设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。

pm.process_idle_timeout mixed

秒数,多久之后结束空闲进程。 仅当设置 pm 为 ondemand。 可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:10s。

pm.max_requests int

设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 '0' 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0

 

php-fpm是一个多进程单线程的模型

每个fpm平均大概占用内存20到30mb 那么机器支持最高的fpm数量公式如下:
fpm数量 = 机器内存 * 1024M * 0.8 / 30 (20)

乘以0.8 是为服务器留出一点内存,处理其他业务

 

例如: 一个4G内存服务器
 4 * 1024 * 0.8 / 30   约等于  109  个 FPM 进程数

那么如果
pm = static
则
pm.max_children = 109 
静态,始终保持一个固定数量的子进程

pm = ondemand
进程在有需求时才产生,在持续闲置了pm.process_idle_timeout秒后就会被杀掉, 弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的话,无法避免服务器频繁创建进程的问题

pm = dynamic
pm.max_children = 109
pm.start_servers = 55  (默认值:min_spare_servers + (max_spare_servers - min_spare_servers) / 2 )
启动时,会产生固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程数,而最大子进程数则由pm.max_children去控制

pm.min_spare_servers = 10    设置空闲服务进程的最低数目
pm.max_spare_servers = 100    设置空闲服务进程的最大数目

 

心情不错~~~

 

 

上一篇:centos7编译安装php7.4.22


下一篇:Hystirx(1)