php fpm 三个模式_php-fpm优化,3种运行模式详解

三种工作模式

ondemand,static,dynamic(内存优先、静态池、服务优先)

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,不适合大流量模式

不推荐使用此模式

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,请求数稳定,不需要频繁销毁

static

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

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

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

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

模式选择

静态适合大内存机器,动态适合小内存服务器,2g,ondemand模式适合微小的内存,2g以下

进程数不是越多越好,进程数增多会增加进程管理开销以及进程上下文切换,并发执行数也不会超过cpu核数,cpu密集型,pm.max_children不能超过cpu内核数,如果不是可以将pm.max_children的值设置大于cpu核数

动态建立进程个数

N+20% 到 M/m之间

N是cpu核数,M是内存,m是每个php进程内存数

静态进程个数

M/(m*1.2)

pm.max_requests, 设置最大请求数,达到这个数量以后,会自动长期worker进程,繁殖内存意外增长

其他配置讲解

# 全局设置

process.max = 10 #最大进程数

# www.conf

user = nobody # 进程发起的用户和用户组,nobody为任意用户,user必须设置,group不用

group = www

listen = [::]:9000

pm = dynamic # 进程池管理器如何控制子进程数量,static,静态,固定值 dynamic 动态 ondemand

pm.max_children = 16 # 同一时刻能够存活的最大子进程数

pm.start_servers = 4 # 启动时启动的子进程数

pm.min_spare_servers = 2 # 处于空闲 idle状态的最小进程,如果空闲进程数量小于这个值,那么相应的子进程会被创建, 可以有效的减少创建的进程数,请求处理不过来,才会循序渐进的创建

pm.max_spare_servers = 16 # 最大空想进程数,空闲子进程数超过这个值,那么相应的子进程会被杀掉

catch_workers_output = yes # worker进程的标准输出和错误输出会重定向到错误日志中,没有设置会输出到/dev/null

;slowlog = xxx # 默认关闭,慢日志路径

;request_slowlog_timeout = 0 # 脚本执行超过多久就记录到日志文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值