PHP-FPM 对三种子进程的管理模式

1.pm=static

静态。始终保持一个固定数量的子进程,这个数由(pm.max_childrem)定义,这种方式很不灵活,通常不是默认的


2.pm=dynamic

动态。子进程的数量在下面配置的基础上动态设置:pm.max_children、pm.start_servers、pm.min_spare_servers、pm.max_spare_servers。


启动时,会创建固定数量的子进程(由pm.start_servers控制)可以理解成最小子进程树,而最大子进程数由pm.max_childrem参数控制,这样的话子进程数在会在最大和最小区间变化。


闲置的子进程由另外2个配置控制,分别是pm.min_spare_servers和pm.max_spare_servers,也就是闲置的子进程也有最大和最小数量限制,而如果闲置的子进程超出pm.max_spare_servers则会被杀掉。


这种模式非常灵活,也通常是默认选项。但是,dynamic模式为了最大化的优化服务器响应,会造成更多内存使用,因为这种模式只会杀掉最大闲置进程数(pm.max_spare_servers)的闲置进程,比如最大闲置进程是30,最大进程是50,然后网站经历一个访问高峰,此时50个子进程全部忙碌,0个闲置进程,然后过了高峰期,可能没有一个请求,于是可能由50个闲置进程,但是此时PHP-FPM会杀掉20个子进程,始终剩下30个闲置进程等待请求,这可能就是为什么过了高峰期后即便请求书大量减少服务器内存使用却没有大量减少,也可能是为什么有些时候重启服务器会好些,因为重启后,PHP-FPM子进程数会变成最小闲置进程数,而不是之前最大闲置进程数。


3.pm=ondemand

进程有需要时才产生,由dynamic相反,pm=start_servers在服务启动时即启动。


这种模式把内存放到第一位,它的工作模式很简单,每个闲置进程在持续闲置了pm.process_idle_timeout秒后就会被杀掉,有了这个模式,到了服务器低峰期内存会自动降下来,如果服务器长时间没有请求,就只有一个PHP-FPM主进程,当然弊端是,遇到高峰期或者如果pm.process_idle_timeout的值太短的话,无法避免服务器重复创建进程的问题,因此pm=dynamic和pm=ondemand谁更合适视情况而定。


涉及到的参数:

pm.max_children:静态方式下开启的PHP-FPM进程数量

pm.start_servers:动态方式下的起始PHP-FPM进程数量

pm.min_spare_servers:动态方式下的最小PHP-FPM进程数量

pm.max_spare_servers:动态方式下的最大PHP-FPM进程数量


如果pm设置为static,那么其实只有pm.max_children这个参数生效,系统会开启设置的数量个PHP-FPM进程。

修改时间 2022-11-27

真诚赞赏,手留余香
赞赏
前端,HTML
p 标签里面不能嵌套块级元素
2022-11-05
操作系统
Linux 中 top 命令的 Load Average 含义
2022-11-05
ngtwewy
随机推荐
CSS3 实现 Switch 开关
JavaScript console 的用法
MySQL 批量插入数据时如何解决重复问题
什么是 RESTful API 的幂等性
Node.js 18.x 开始支持内置单元测试
p 标签里面不能嵌套块级元素
数据库中间表应该如何命名
Debian11 安装笔记4:安装常用软件
Nginx 的 location 设置
CSS 媒体特性 prefers-color-scheme

微信联系我

夜间模式切换
回到顶部