前言

之前优化我们公司的推送消息接口,在较大并发的情况下,用户从手机App打开页面的速度比较慢,所以逐一找了一些解决方法,最后发现是php-fpm没有设置一个最优解,于是记录本次的调优,并顺便解释一下php-fpm配置的各个字段的意思。

过程

刚开始以为是因为并发过大,Api接口的数据请求较大,所以在推送上设置了平缓推送,虽然从一定程度上缓解了加载的问题,但是还是没有从根本上解决。
后来查看了一下正在跑的php-fpm,发现只有五个进程在跑,然后看了一下php-fpm.conf,发现他的max_children还是默认的5,所以问题就出现在了这里,于是我们增加了max_children,同时加大了他的start_serversmax_requests,后来再做推送的时候,就完美解决了这个问题。

配置

php-fpm的配置虽然看着挺多,但是我们在实际应用中也就用到那么几个,详细的配置解释可以在这里看,我们在这里主要聊一下他的pm配置。

pm

设置进程管理器如何管理子进程。可用值:static,ondemand,dynamic。必须设置。
static - 子进程的数量是固定的(pm.max_children)。
ondemand - 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动。
dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers。

pm的默认值是dynamic,动态生产子进程,这也是我们用的最多的,他可以根据我们的业务请求来动态生产,当我们的php-fpm都被占用时,就会产生一个新的子进程,来缓解压力。

ondemand模式虽然也比较灵活,但是在长时间没有响应时只有一个进程,所以他的弊端在于,会随着业务的变化的幅度较大。

process_idle_timeout

进程的闲置时间,超过这个时间,就自动杀死进程,默认时间是10s

max_children

最大进程数。

start_servers

php-fpm启动时启动的子进程数。

min_spare_servers

设置空闲服务进程的最低数目。仅在 pm 设置为 dynamic 时使用。必须设置。

max_spare_servers

设置空闲服务进程的最大数目。仅在 pm 设置为 dynamic 时使用。必须设置。

request_terminate_timeout

设置单个请求的超时中止时间。该选项可能会对 php.ini 设置中的 'max_execution_time' 因为某些特殊原因没有中止运行的脚本有用。设置为 '0' 表示 'Off'。可用单位:s(秒),m(分),h(小时)或者 d(天)。默认单位:s(秒)。默认值:0(关闭)。

请求的超时时间默认是0,也就是一直请求,除非nginx设置了一个响应时间的限制,否则一直占用了这个php-fpm的子进程,导致资源浪费,所以建议根据自己的业务设置一个响应超时的时间。

max_requests

设置每个子进程重生之前服务的请求数。对于可能存在内存泄漏的第三方模块来说是非常有用的。如果设置为 '0' 则一直接受请求,等同于 PHP_FCGI_MAX_REQUESTS 环境变量。默认值:0。
相关评论(0)
您是不是忘了说点什么?

友情提示:垃圾评论一律封号...

还没有评论,快来抢沙发吧!