应用服务接口第二次请求一直pending问题

目录

一、问题背景

升级内容发布到灰度环境,验证相关服务,查看接口调用日志,发现第一次请求正常,第二次相同接口请求就一直pending,其他服务也是如此

二、问题排查过程

1、一开始怀疑是数据库打满了,导致响应阻塞,后来查看正常

2、排查后端服务日志,发现第二次请求都没有接收到,说明和后端服务也没有关系

3、后面仔细看pending的接口请求header报504,怀疑是nginx导致的问题

三、解决方案

运维配置的nginx有问题,待解决

四、总结

如果业务系统中使用了 Nginx 作为网关,出现第一次调用接口正常,第二次一直 pending 的情况,网关出现问题是有可能的,以下是一些相关的原因及分析:

  • 连接池配置问题

原因:Nginx 可能配置了连接池来管理与后端服务的连接。如果连接池的大小设置不合理,第一次调用接口时可能创建了新连接并正常使用,但第二次调用时连接池已满,且没有可用连接被释放,新的请求就会处于等待状态,一直 pending。或者连接池中的连接在第一次使用后出现异常,但没有被正确处理,导致第二次使用时出现问题。

解决方案:检查 Nginx 连接池的配置参数,如keepalive指令设置的连接数等,根据实际业务需求合理调整连接池大小。同时,确保连接池中的连接在使用后能正确释放和回收,对于异常连接要及时进行处理和清理。

  • 缓存设置问题

原因:Nginx 可能配置了缓存功能,第一次请求的结果被缓存下来,第二次请求时 Nginx 尝试从缓存中获取数据。如果缓存数据损坏、不完整或者缓存更新机制出现问题,可能导致 Nginx 无法正确返回缓存数据,进而使请求一直处于 pending 状态。

解决方案:检查 Nginx 的缓存配置,包括缓存区域的大小、缓存时间、缓存更新策略等。可以尝试清理缓存数据,观察问题是否解决。如果是缓存更新机制的问题,需要调整相关配置,确保缓存数据能及时、正确地更新。

  • 请求限流或限速设置

原因:Nginx 可能设置了请求限流或限速策略,以保护后端服务免受过多请求的冲击。第一次请求可能在限流或限速范围内正常处理,但第二次请求由于并发请求数增加或者请求频率超过了限制,被 Nginx 暂时挂起,导致一直 pending。

解决方案:检查 Nginx 的限流或限速配置指令,如limit_req_zone和limit_rate等,分析当前的请求流量是否超过了设置的阈值。如果是,根据实际情况调整限流或限速策略,或者增加后端服务的处理能力,以满足业务需求。

  • Nginx 配置错误

原因:Nginx 的配置文件中可能存在一些错误或不恰当的设置,影响了接口的正常调用。例如,server块、location块的配置参数错误,导致第二次请求的路由或处理出现问题;或者proxy_pass指令配置的后端服务地址不正确,使得请求无法正确转发。

解决方案:仔细检查 Nginx 的配置文件,确保各个指令的参数设置正确,路由规则符合业务需求。可以使用nginx -t命令来检查配置文件的语法正确性,并根据错误提示进行修改。如果怀疑配置文件中的某些部分存在问题,可以逐步注释掉相关配置,进行测试,以定位问题所在。

  • Nginx 进程或线程问题

原因:Nginx 在处理请求时,可能出现进程或线程挂起、阻塞等异常情况。例如,某个工作进程在处理第一次请求后进入了一个异常状态,导致后续的请求无法被正常处理,一直处于 pending 状态。这可能是由于 Nginx 本身的代码缺陷、内存泄漏或者受到外部因素(如系统资源不足、信号干扰等)的影响。

解决方案:查看 Nginx 的错误日志文件,查找是否有关于进程或线程异常的记录。同时,监控系统的资源使用情况,如 CPU、内存、磁盘 I/O 等,确定是否存在资源不足的问题。如果发现 Nginx 进程存在异常,可以尝试重启 Nginx 服务,并观察问题是否重现。如果问题仍然存在,可以考虑升级 Nginx 版本,或者向 Nginx 社区寻求帮助。

相关推荐
十年Java程序媛19 分钟前
Java 多线程基础与锁机制详解|进程线程、锁升级、synchronized 与 Lock 对比
java·开发语言·spring boot
弯_弯19 分钟前
FDE 的工程能力画像:数据接入、PoC 与可复用资产的落地口径
java·服务器·开发语言
云和数据.ChenGuang2 小时前
print(f“a+b=“,result) print(f“a+b={result}“)区别
java·前端·人工智能·python·深度学习
2601_962885722 小时前
如何用 Python 算最大回撤和回撤恢复期?
java·数据库·python
毕业设计7032 小时前
(免费领源码)SSM董家湾线上点餐系统04682- java、PHP、python、C#、小程序、大数据、单片机、网络工程等)
java·redis·mysql·tomcat·maven·mybatis·ssm
Q26433650233 小时前
【有源码】基于SpringBoot+Vue的居民健康体检与慢病干预管理系统-面向智慧医疗的体检预约与健康知识服务平台
java·vue.js·spring boot·mysql·毕业设计·javaweb·课程设计
悠仁さん3 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
鬼手点金3 小时前
上下文:Agent 的眼睛
java·前端·人工智能·git·深度学习
171320330计算机毕设编程3 小时前
计算机毕业设计 基于Hadoop的新能源汽车发展前景分析 LW PPT
java·大数据·hadoop·python·算法·随机森林·线性回归