PHP-FPM配置说明

前言

  本文仅个人操作与理解可能存在歧义,如有任何问题请大家能指出方便修正。

PHP-FPM和进程的理解

例如我们打开一个网易云音乐软件,那我们后台就会有一个网易云音乐的进程,如下图:
在这里插入图片描述当然了这边两个进程但并不代表我同时打开了两次网易云音乐,仅仅只是一个是主进程一个是子进程。那么当我们一直点击打开网易云音乐就会产生更多的进程数量,这时候会发现系统越来越卡。那么一个系统能打开多少个网易云音乐且不卡就是一个多开的最优调节。同样的PHP-FPM他也是个软件但它仅有一个master 其中一个master可以产生多个子进程遵循fast-cgi协议,而php-fpm进程则更像是一个解析器。(大家可以在修改nginx配置不去通知php-fpm就会发现访问连接会把整个代码都输出所以nginx无法解析php只能通知php-fpm去解析然后再返回给用户(nginx和php-fpm都遵循fast-cgi协议)nginx配置名为fastcgi_pass,然后php-fpm会监听php8.0-fpm.sock)。

其中window没有php-fpm所以在我们的管理器只能看到php-cgi进程。所以配置都针对的是linux系统下

PM的配置

root@Xing:/# ps aux | grep php-fpm  #查看php-fpm的进程
root       17299  0.0  0.1 223832 30892 ?        Ss   21:25   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)  #这个是主进程
root       24189  0.0  0.0  12360  2252 pts/1    S+   22:33   0:00 grep --color=auto php-fpm
root@Xing:/# ps -ef |grep "php-fpm"|grep "pool"|wc -l  #查看php子进程个数
0

static

一般内存较大可使用静态配置。可用配置为:

pm.max_children
最大子进程数量,配置多少个子进程,重启fpm的开始子进程就有多少个。
设置成3就有3个pool。当我们设置成一个那么在不同的浏览器打开一个需要等待5秒的请求。会发现另一个请求需要等待。所以内存足够大直接设置多一点。当我们kill子进程会发现他会立刻重启新的fpm子进程。

root@Xing:/home/hyx/hyx/xdebug# ps aux|grep php-fpm
root      135949  1.5  0.1 224168 31236 ?        Ss   21:42   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
www       135950  0.0  0.0 224592 11460 ?        S    21:42   0:00 php-fpm: pool www
www       135951  0.0  0.0 224592 11460 ?        S    21:42   0:00 php-fpm: pool www
www       135952  0.0  0.0 224592 11460 ?        S    21:42   0:00 php-fpm: pool www

pm.max_requests = 2
子进程最大请求次数,也就是fpm请求生命周期。我设置成2次那么可以看出第三次请求网站后原本子进程ID:141187变更为141196。设置数值太大可能导致内存泄露访问缓慢甚至502错误。(就像系统用久了不重启会卡一样)。设置太小可能导致系统频繁重启消耗cpu。

root@Xing:/home/hyx/hyx/xdebug# ps aux|grep php-fpm
root      141186  1.0  0.1 224168 30812 ?        Ss   22:52   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
www       141187  0.0  0.0 224592 11504 ?        S    22:52   0:00 php-fpm: pool www
root@Xing:/home/hyx/hyx/xdebug# ps aux|grep php-fpm
root      141186  0.2  0.1 224168 30812 ?        Ss   22:52   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
www       141187  1.9  0.2 232252 43884 ?        S    22:52   0:00 php-fpm: pool www
root@Xing:/home/hyx/hyx/xdebug# ps aux|grep php-fpm
root      141186  0.1  0.1 224168 31324 ?        Ss   22:52   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
www       141196  0.0  0.0 224592 11504 ?        S    22:53   0:00 php-fpm: pool www

dynamic

一般内存较小会设置成动态。可用配置如下:

设置成动态要特别注意,每个配置项的数量关系不然可能导致fpm无法重启。

pm.max_children 最大子进程数量,dynamic下最大子进程数量不决定启动时的子进程数

pm.start_servers 重启fpm的时候的起始子进程数量。当我们的访问超载导致的nginx崩溃可以配置大一点但不能超过max_children会导致fpm无法启动。但要大于pm.min_spare_servers

pm.min_spare_servers 最小空闲数量。例如:n个访问生成了n个子进程这时候总子进程就是n+pm.min_spare_servers 个子进程数量。这个时候命令:kill -9 子进程号发现删除不掉子进程是因为pm.max_spare_servers 最大空闲数量导致。n个子进程执行完后子进程不会消失原因满足最大空闲数量。

pm.max_spare_servers 最大空闲数量。例如:pm.start_servers=2,pm.min_spare_servers=2,
pm.max_spare_servers=2。那么起始子进程是2个,当我们访问了连接就会发现一次访问就是一个子进程然后需要2个最小空闲子进程所以有3个子进程。访问结束后因为最大空闲为2个所以空闲子进程剪掉一个,最后剩下2个子进程。当我们pm.max_children也设置成2的时候就不遵循2个最小空闲进程了,也就是说进程不够的情况下也会拿最小空闲数量来用。

pm.max_requests = 3 与静态的最大访问次数一样。

注意
以上子进程数配置
pm.min_spare_servers <= pm.start_servers <= pm.max_spare_servers <= pm.max_children
不然启动不了。

ondemand

有访问的时候才会产生子进程进程。如果沒有访问就只有一个master进程。个人认为没有人访问的网站可以设置成ondemand 一经启动才开起进程

hyx@Xing:~$ ps aux|grep php-fpm
root       15204  2.0  0.1 224168 30664 ?        Ss   22:15   0:00 php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)

可用配置如下:

pm.max_requests = 3 与静态的最大访问次数一样。
pm.process_idle_timeout = 10s 空闲子进程10秒后被kill

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值