php发展

首页 » 常识 » 常识 » phpfpm解读进程管理的三种模式
TUhjnbcbe - 2021/4/14 18:58:00
甲氧沙林是不是治疗白癜风的药物         http://pf.39.net/bdfyy/bdfyc/170224/5231253.html

导读:php-fpm(FastCGI进程管理器)用于替换PHPFastCGI的大部分附加功能,对于高负载网站非常有用,本篇就来详解它的三种进程模式。

php-fpm进程管理一共有三种模式:ondmand、static、dynamic,我们可以在同一个fpm的mastr配置三种模式,请看下图。

php-fpm的工作模式和nginx类似,都是一个mastr,多个workr模型。每个workr都在accpt本pool内的监听套接字(linux已不存在惊群现象)。

ondmand

在php-fpm启动的时候,不会给这个pool启动任何一个workr,是按需启动,当有连接过来才会启动。

以下是php-fpm的配置文件(我的配置文件地址为:/usr/local/php/tc/php-fpm.conf)

可以看到当前pool的名字为tst。

原理如下图示:

ondmand原理图

.从上图可以看出,新建workr的触发条件是连接的到来,而不是实际的请求(例如,只进行连接比如tlnt,不发请求数据也会新建workr)

2.workr的数量受限于pm.max_childrn配置,同时受限全局配置procss.max(准确的说,三种模式都受限于全局配置)

.秒定时器作用

找到空闲workr,如果空闲时间超过pm.procss_idl_timout大小,关闭。这个机制可能会关闭所有的workr。

配置项要求

.pm.max_childrn0

2.pm.procss_idl_timout0,如果不设置,默认0s

优缺点

优点:按流量需求创建,不浪费系统资源(在硬件如此便宜的时代,这个优点略显鸡肋)

缺点:由于php-fpm是短连接的,所以每次请求都会先建立连接,建立连接的过程必然会触发上图的执行步骤,所以,在大流量的系统上mastr进程会变得繁忙,占用系统cpu资源,不适合大流量环境的部署

dynamic

在php-fpm启动时,会初始启动一些workr,在运行过程中动态调整workr数量,workr的数量受限于pm.max_childrn配置,同时受限全局配置procss.max

当前pool的名字为tst

原理如下图示。

dynamic原理图

.秒定时器作用

检查空闲workr数量,按照一定策略动态调整workr数量,增加或减少。增加时,workr最大数量=max_childrn·=全局procss.max;减少时,只有idlpm.max_spar_srvrs时才会关闭一个空闲workr。

idlpm.max_spar_srvrs,关闭启动时间最长的一个workr,结束本次处理

idl=pm.max_childrn,打印WARNING日志,结束本次处理

idlpm.max_childrn,计算一个num值,然后启动num个workr,结束本次处理

配置项要求

.pm.min_spar_srvrs/pm.max_spar_srvrs有效范围(0,pm.max_childrn]

2.pm.max_childrn0

.pm.min_spar_srvrs=pm.max_spar_srvrs

4.pm.start_srvrs有效范围[pm.min_spar_srvrs,pm.max_spar_srvrs]如果没有配置,默认pm.min_spar_srvrs+(pm.max_spar_srvrs-pm.min_spar_srvrs)/2

优缺点

优点:动态扩容,不浪费系统资源,mastr进程设置的秒定时器对系统的影响忽略不计;

缺点:如果所有workr都在工作,新的请求到来只能等待mastr在秒定时器内再新建一个workr,这时可能最长等待s;

static

php-fpm启动采用固定大小数量的workr,在运行期间也不会扩容,虽然也有秒的定时器,仅限于统计一些状态信息,例如空闲workr个数,活动workr个数,网络连接队列长度等信息。

当前pool的名字为tst

原理如下图示:配置项要求

、pm.max_childrn0必须配置,且只有这一个参数生效

优缺点

如果配置成static,只需要考虑max_childrn的数量,数量取决于cpu的个数和应用的响应时间,我司配置的是50。

我司不考虑动态的增加减少那么十几个或者几十个workr,我们的内存没有紧张到这个层度,所以,我们一步到位,把workr数配置到支持最大流量,(哈哈,50也是随便定的,足矣足矣呢)

最后,我们再介绍下workr的工作流程。如下图:

(此图出自大表哥

要要)

fastcgi与php-fpm的关系一句话解读:fastcgi只是通信应用协议,php-fpm就是基于这个协议与nginx进行通信。

大表哥说fpm必须让大象背上,设计能力有限,凑合看吧

作者:程序媛大丽。本名张丽,山西姑娘。原新浪乐居PHP工程师,负责新浪乐居网站与API的开发与团队管理。自如网技术经理。热心社区的技术分享。

预览时标签不可点收录于话题#个上一篇下一篇
1
查看完整版本: phpfpm解读进程管理的三种模式