hi,欢迎访问本站!
当前位置: 首页编程开发正文

php php-fpm三种运行模式介绍与区别

墨初 编程开发 609阅读

php 在linux模式下用得最多的应该是PHP-FPM FastCGI 进程管理器,而php-fpm分为三种运行模式,分别为 static(静态模式),dynamic(动态模式),ondemand(按需模式),下面就详细的对这三种模式进行介绍。

php php-fpm 三种运行模式

static:静态模式

启动固定大小数量的worker,也有1s的定时器,用于统计进程的一些状态信息,例如空闲worker个数,活动worker个数。

pm.max_children = 10 #必须配置这个参数,而且只有这个参数有效

优点:不用动态判断负载,提升性能

缺点:如果配置成static,只需要考虑max_children数量,数量取决于cpu的个数和应用的响应时间,一次启动固定大小进程浪费系统资源

dynamic:动态模式

会初始化创建一部分worker,在运行过程中,动态调整worker数量,最大worker数受pm.max_children和process.max。

listen = 127.0.0.1:9001
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6

当空闲进程数小于min_spare_servers时,创建新的子进程,总子进程数小于等于pm.max_children,小于等于process.max

当空闲进程数大于max_spare_servers,会杀死启动时间最长的子进程

如果子进程(idle状态)数大于max_children,会打印warning日志,结束处理

process小于 max_children ,计算一个num,启动num个worker

优点:动态扩容,不浪费系统资源

缺点:所有worker都在工作,新的请求到来需要等待创建worker进程,最长等待1s(内部存在一个1s的定时器,去查看,创建进程),频繁启停进程消耗cpu,请求数稳定,不需要频繁销毁

ondemand:按需模式

php-fpm启动的时候不会启动worker进程,按需启动worker,有链接进来后,才会启动。

listen = 127.0.0.1:9001
pm = ondemand
pm.process_idle_timeout = 60
pm.max_children = 10

连接到来时(只有链接,不没有数据也会创建,telnet也会创建),创建新worker进程,worker进程数的创建收max_children设置限制,也受限于全局的process.max设置(三种模式都受限此,下文中有全局配置项讲解),如果空闲时间超过了process_idle_timeout的设置就会销毁worker进程

优点:按流量需求创建,不浪费系统资源,

缺点:因为php-fpm是短连接的,如果每次请求都先建立连接,大流量场景下会使得master进程变得繁忙,浪费cpu,不适合大流量模式

php php-fpm模式选择推荐

dynamic:适合流量浮动大的场景。

static:适合流量相对稳定的场景。

ondemand:适合流量浮动大的场景,而且流量变化比较规律,否则由于pm.process_idle_timeout设置不准效果适得其反,过大会浪费资源,过小会导致频繁杀死进程。

声明:无特别说明,转载请标明本文来源!
相关推荐