解决办法
测试服务器配置: 2核 4G
1、先看PHP的php.ini设置
max_execution_time = 120
memory_limit = 128M
max_execution_time 脚本最大执行时间,这里最好配置60+,比如curl的超时就是60,配置大一点比较好。
这样子就算curl 60s超时了,你还可以通过set_time_limit(0);
来重置计时器。
memory_limit 的设置跟你的项目有关,例如wp就建议128M,我们这里就设为128M。
怎么看设置多少为合适?访问执行消耗大的脚本,服务器执行top
命令,观察%MEM的消耗。
2、再看PHP-FPM的配置
pm = static
pm.max_children = 20
pm.max_requests = 1000
request_terminate_timeout = 300s
pm模式建议为static,我个人经验。 扩展阅读:https://www.jianshu.com/p/c9a028c834ff
pm.max_children = 20 这个20是怎么来的呢,嗯,服务器4G内存,实际空闲的大概3500M吧,3500/(128x1.2)=22.79,取小,于是就20咯。理论上说,并发还是取决于CPU的核数,如果是计算型的就设置为CPU的核数,非计算型的,用 空闲内存 / (脚本最大内存*1.2) 咯,取小。扩展阅读:http://xiaohost.com/2614.html
pm.max_requests 就是单个子进程最大的处理量(处理完子进程会重启),主要看业务需求,内存消耗大的,设置小一点就会早点释放内存;如果没什么内存消耗的,设置大一点咯。
request_terminate_timeout 这个是php.ini里面的max_execution_time 脚本最大超时有问题的时候,就会看这个参数,时间达到了就会干掉子进程。
嗯,所以总的来说,NGINX 提示502,而PHP提示exited on signal 9(SIGKILL) ,是由于PHP配置出的问题。