教学之友,学习之友。

站长教学网

php-fpm配置的max_children、max_requests和request_slowlog_timeout

时间:2012-10-16 12:10来源:未知 作者:ken 点击:

<value name="max_children">64</value>  
max_children :这个要按照服务器的繁忙程度来计算,最好是得到详细的访问者日志后再进行调整。设置的值越大后台跑的php-cgi 进程就越多,这样排队速度就越快。反之就是越少就越慢。但是每一个php-cgi所耗费的内存在20M左右。所以2g的服务器这个值默认都设置成40-64。

<value name="request_slowlog_timeout">0s</value> 
request_slowlog_timeout:0s的含义是让PHP-CGI一直执行下去而没有时间限制。默认就设置成0,如果可能出现脚本执行时间超长的话,那就设置为600s左右。 

<value name="max_requests">10240</value>

PHP_FCGI_MAX_REQUESTS is the maximum number of requests before an fcgid process is stopped and a new one is launched

强制停止一个php CGi 进程,新建一个进程以响应新请求时,所允许的最大请求数,可以理解为队列长度

 

PHP_FCGI_CHILDREN  php进程数目

PHP_FCGI_MAX_REQUESTS  每个php的进程在退出前能够响应的请求数,用于释放资源 上面两个根据硬件配置和网站访问量设置,默认值是8,500。

一般来说 PHP_FCGI_CHILDREN > 访问并发最大值+10

PHP_FCGI_MAX_REQUESTS 如果设置过小,访问量大的网站会因为php进程重起频繁增加负荷。

 

max_children=40 , 每个children平均占用20M-30M内存,children越多,可以同时接受的并发数量越多,一般children的值是网站最高并发数+浮动值,这值再×内存占用,就是你需要用到的内存。

max_requests = N 是指当每个children接受了N次请求以后,就会把自己杀死,然后重新建立一个children。

PV / max_children = 每一个children接受的request次数

比如上面的值是1000,而你定义的是10240,那么fpm要超过10天才能杀死children并重建,这样如果存在内存泄露的话,就会导致进程占用过多的内存而无法释放,从而使fpm的处理能力降低,还会产生一些莫名其妙的错误。

但是如果你把这个值设置的过小,fpm频繁的杀死children并重建,也会导致额外的开销。

最好的优化当然是根据你网站的运行情况,去不断的调试,找到一个平衡点。

针对max_children还有一个偷懒的做法,如果你的php是5.3,那么你可以把fpm的style设置为apache-like,这个时候children的数量就由fpm自动控制。相应的配置参数是
start_servers:起始进程数量
min_spare_servers:最小进程数量
max_spare_servers:最大进程数量
当服务器比较空闲的时候,fpm会主动杀死一些多余的children,用来节约资源,当服务器繁忙的时候,服务器会自动建立更多的children。

该答案已被锁定,无法对其进行评论,编辑及投票。
()
 
(责任编辑:ken)
TAG标签: php cgi fpm
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
注册登录:不允许匿名留言,登录后留言无需输入验证码。
栏目列表
最新内容