一次接口nginx502的排查经历

接口是一个生成全景作品的接口,接口会经历下载、切图、上传三个步骤。接口大部分时间运行是正常的,图片数量过多时会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);不生效

临时解决

调大上述参数

终极解决

切图任务不要放在控制器处理,改用消息队列。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注