Nginx+PHP-FPM频繁出现502 Bad Gateway

高并发下频繁出现502,出现502的接口并不是等待很长时间,而是马上响应了502,我在想是不是PHP-FPM资源处理不过来了?有什么方法能让这些请求阻塞,而不是马上502
很奇怪,每秒平均也就有20-30的并发量,为啥有大量的502,理论上我开起了上百个php-fmp进程

Nginx错误日志

[error] 3395405#0: *353418 recv() failed (104: Connection reset by peer) while reading response header from upstream

PHP-FPM配置

pm.status_path = /phpfpm_80_status
pm.max_children = 2000
pm.start_servers = 500
pm.min_spare_servers = 500
pm.max_spare_servers = 800
pm.max_requests = 1000
request_terminate_timeout = 60
request_slowlog_timeout = 5
让PHP再次伟大
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 24

Connection reset by peer

大概率是处理不过来

可以尝试这些操作

  • 尝试运行下 nginx -t, 检查配置信息
  • 重启 php-fpm
  • 检查 access.log
  • 启用 nginx 调试日志 debug.log
  • 打开 php-fpm 日志记录
  • 检查链接数量, 同时检查 ulimit -a
2个月前 评论
勇敢的心 (楼主) 2个月前
kis龍 (作者) 2个月前
kis龍 (作者) 2个月前
kis龍 (作者) 2个月前

fpm是阻塞性设计,当前请求没处理完,是不会接收后续请求的,超出fpm并发,就会导致此结果,所以优化按重要性如下:

  • 首要是业务代码优化,优化的思想是削峰,将耗时的业务重新设计,或使用缓存,或拆分,或异步处理,提高业务处理速度。
  • 其次是opcache和fpm配置优化,pm设置为静态,固定进程数,pm.max_requests=300太小了,应提高此值。
  • 最后才是linux系统优化(提升有限)。
2个月前 评论
勇敢的心 (楼主) 2个月前
lovewei (作者) 2个月前

这个错误信息通常表示你的应用服务器(上游服务器)在 Nginx 试图读取响应头时突然关闭了连接。这可能是由于你的应用服务器崩溃或者运行超时。

你可以尝试以下方法来解决这个问题:

检查你的应用服务器的日志,看看是否有任何错误信息。这可能会帮助你找到问题的原因。

增加你的应用服务器的超时时间。这可能会帮助你解决由于运行超时导致的问题。

如果你的应用服务器是 PHP-FPM,你可以尝试增加 pm.max_children 的值。这可能会帮助你解决由于 PHP-FPM 子进程不足导致的问题。

如果你的应用服务器是 PHP-FPM,你可以尝试设置 request_terminate_timeout 的值。这可能会帮助你解决由于单个 PHP 请求运行过长导致的问题。

如果你的应用服务器是 PHP-FPM,你可以尝试设置 catch_workers_output = yes。这可能会帮助你获取更多的错误信息。

需要注意的是,这些方法可能不会解决所有的问题,你需要根据你的实际情况来选择合适的方法。

2个月前 评论
sanders

兄弟,你的上一个帖子还没关。我建议咱们先确定问题再进行调整,先把 fpm 的日志都打开,看看请求过来了没有,以及处理的时间。

如果是并发导致的,症结往往在处理速度上。你想让客户端等着排队连接不释放解决不了问题。你不如先找找哪里处理慢,进行程序优化。

如果你想让用户等待,也可以采取队列异步处理的方式,这样就能马上先响应等待状态并释放连接,再异步通过 websocket 等手段推送用户执行结果。

2个月前 评论

本质上是你的接口太慢了,看看监控,找找高频的慢接口,优化下

2个月前 评论
sanders 2个月前
勇敢的心 (楼主) 2个月前

记录下请求日志,分析下耗时的请求。查看有没有过多耗时的或者使用mysql频繁的cmd

2个月前 评论
xiaochong0302

查看日志,可能是程序里面出致命错误了,不一定是并发问题。

2个月前 评论
勇敢的心 (楼主) 2个月前

fpm 设置成静态的,不要搞动态的。

2个月前 评论
勇敢的心 (楼主) 2个月前
kis龍 2个月前
滚球兽进化 (作者) 2个月前
勇敢的心 (楼主) 2个月前
lzbrest 2个月前
勇敢的心 (楼主) 2个月前
lzbrest 2个月前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!