php php-fpm三种运行模式介绍与区别
墨初 编程开发 597阅读
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设置不准效果适得其反,过大会浪费资源,过小会导致频繁杀死进程。