接口是一个生成全景作品的接口,接口会经历下载、切图、上传三个步骤。接口大部分时间运行是正常的,图片数量过多时会Nginx502。
排查经历
首先了解502是什么类型的错误,502 错误表明 Nginx 作为代理服务器时,无法从上游服务PHP-FPM获取有效响应。
先排查nginx配置的超时时间
是否超时时间过短导致的服务断开。nginx超时相关配置为/www/server/nginx/conf/proxy.conf
proxy_connect_timeout 60;# 连接上游超时 proxy_read_timeout 300;# 读取响应超时 proxy_send_timeout 120;# 发送请求超时
调大连接上游超时和读取响应超时,程序在多图时依然502。
考虑调整php.ini配置
看到接口设置了set_time_limit(0);
和ini配置max_execution_time一样只影响脚本本身执行的时间,已经设置了不超时,可是程序还是提前退出了。
考虑调整php-fpm配置
/www/server/php/73/etc/php-fpm.conf
其中有一个配置是
request_terminate_timeout = 300s #整个PHP进程生存时间
进程超时优先大于脚本执行超时,如下图示:

所以会出现set_time_limit(0)
;不生效
临时解决
调大上述参数
终极解决
切图任务不要放在控制器处理,改用消息队列。