前言
之前优化我们公司的推送消息接口,在较大并发的情况下,用户从手机App打开页面的速度比较慢,所以逐一找了一些解决方法,最后发现是php-fpm
没有设置一个最优解,于是记录本次的调优,并顺便解释一下php-fpm
配置的各个字段的意思。
过程
刚开始以为是因为并发过大,Api
接口的数据请求较大,所以在推送上设置了平缓推送,虽然从一定程度上缓解了加载的问题,但是还是没有从根本上解决。
后来查看了一下正在跑的php-fpm
,发现只有五个进程在跑,然后看了一下php-fpm.conf
,发现他的max_children
还是默认的5,所以问题就出现在了这里,于是我们增加了max_children
,同时加大了他的start_servers
和max_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。
来源:https://hellonine.top/index.php/archives/55/
友情提示:垃圾评论一律封号...