php-fpm调整进程数

php-fpm调整进程数

   张吉吉     2020年11月9日 10:00     43

修改php-fpm进程的参数有6

pm = dynamic

pm.max_children = 5

pm.start_servers = 4

pm.min_spare_servers = 2

pm.max_spare_servers = 6

pm.process_idle_timeout = 10s

 

pm的值有三个分别是static ,dynamic, ondemand.

static就是静态进程模式

dynamic是动态进程模式

ondemand这就是随机应变的模式

 

static模式

static模式是拥有固定数目的子进程并且只和pm.max_children参数相关,比如设置为8时,在进程中会直接启动8个子进程。使用ps命令查看。

pm.max_children这个参数是一定要设置的

1.png

 

dynamic模式

dynamic模式子进程的数量是根据以下指令动态设置的。通过这种过程管理,将始终至少有1个子节点。

pm.max_children = 5

pm.start_servers = 4

pm.min_spare_servers = 2

pm.max_spare_servers = 6

动态模式和上边四个参数有关。

Pm.max_childern这个参数也是必须要设置的。并且pm.min_spare_serverspm.max_spare_servers不能超过其配置的值,否则会造成php-fpm无法启动。

pm.start_servers的值和pm.min_spare_serverspm.max_spare_servers相关。

下边是计算公式。

pm.start_servers = min_spare_servers + (max_spare_servers - min_spare_servers) / 2

php-fpm启动的时候,也是根据pm.start_servers启动的。

 

ondemand模式

这种模式很少被用,因为其在启动的时候不进行子进程的启动,而是在运行中有连接过来才创建子进程,所以这种效率会比较低。

其和pm.max_childrenpm.process_idle_timeout参数有关。

pm.process_idle_timeout参数就是当进程空闲以后,多长时间被清理掉。默认是10s

 

参数值的计算

一般就是推荐使用static

因为不会再执行过程中启动子进程,尽可能的减少了服务器的开销。但是其因为默认启动过多的子进程,所以会造成资源的占用。

 

现在要有两个场景去进行选择配置的值

第一个就是CPU密集型的程序,php程序需要用大量的cpu资源来进行数据计算之类的操作,在这种场景下,fpm进程可以设置为cpu数量的一倍或者两倍

 

还有一种就是io密集型的代码,一般php-fpm在启动时可能也就占用3m,但运行一段时间后,内存可能因为泄露而到了30M,所以我们就根据这个值去进行计算,也就是memory的量/30M

 

还有文章写到两个公式

Dynamic

N+20%M/m

Static

M/(m*1.2)

上边的N就是服务器CPU的数量

M是服务器内存的总数量

mphp占用的内存数量,一般按照30M计算。

 


其他文章