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进程。
如果pm设置为dynamic,那么pm.max_children参数失效,后面3个参数生效。系统会在PHP-FPM运行开始的时候启动pm.start_servers个PHP-FPM进程,然后根据系统的需求动态在pm.min_spare_servers和pm.max_spare_servers之间调整PHP-FPM进程数
原文参考地址:https://blog.csdn.net/bujidexinq/article/details/106048314