关于执行PHP脚本时 Nginx 提示502 PHP运行日志显示 exited on signal 9(SIGKILL) 的问题

解决办法

测试服务器配置: 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配置出的问题。

你可能感兴趣的:(PHP开发)