php-fpm优化参数

 

预备知识

pm进程管理方式

  1. static 静态,初始化pm.max_children 个子进程,不再改变
  2. dynamic 动态,主要有四个参数,pm.max_children最多活动子进程,pm.start_servers启动时的子进程,pm.min_spare_servers和pm.max_spare_servers,最大最小空闲进程
  3. ondemand 没有初始进程,请求来了就创建,最多max_children个,如果进程空闲时间超过pm.process_idle_timeout就kill

很容易看出来,静态不管访问多少,进程数是固定的,那么内存总是占用着,动态则根据请求数来调整进程数,并始终保持一些进程来应对请求,性能和内存都兼顾着,第三种按需 则完全根据请求量来fork进程,内存占的最少,但是如果遇到突然的访问高峰,就会出现性能问题。

推荐配置

通过上面说的,其实配置主要还是对资源的合理划分,这里最大的资源就是内存和cpu。我们不能一概而论,分下情况来讨论

主要决定内存管理方式:

  1. 机器内存够大, ok,static不用来,空间换时间,不用折腾了
  2. 内存不够,dynamic 即可,如果是你处女座,就是要省内存,ondemand

子进程数量:

  1. 如果你是计算为主,那么肯定对cpu的需要大,那么如果子进程过多,会大量上下文切换,所以这种建议max_chilidren不要超过cpu的个数
  2. 其他均是对内存需要,只要内存够,我们就能创建更多的子进程来处理更过的请求。

进程数x

动态:

1.2N<x<M/m  (N: cup数量 M:内存 m:每个php进程内存)  

静态 :

M/(m*1.2)

具体情况根据实际情况可以进行调整,这里只是个参考。