接口返回502 bad gateway

问题背景

客户反馈某个接口调用502 bad gateway,还跟参数有关,有些可以正常返回。

日志定位

nginx负载日志

recv() failed (104: Connection reset by peer) while reading response header from upstream

java服务端日志

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.http.converter.HttpMessageNotReadableException: I/O error while reading input message; nested exception is java.io.IOException: Connection reset by peer

网上搜到了一个类似报错的分析

问题分析&解决方案

直接使用应用ip+端口访问接口是正常的,通过负载代理就502了,难道负载到应用机器的网络有问题?或者nginx超时时间配置不合理?服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉?

1 网络问题如何排查?

(1)telnet 应用ip 端口 确定负载网络通的

(2)长ping 应用ip,确定有没有丢包的

2 nginx超时配置如何确定是否合理?connect_timeout send_timeout read_timeout

https://zhuanlan.zhihu.com/p/1921624746690352482

其他配置:

client_max_body_size 10M; # 请求体的最大长度,如果请求体超过这个大小,Nginx 将返回 413 Request Entity Too Large 错误。

proxy_buffer_size‌:设置单个缓冲区的最大大小。

‌proxy_buffers ‌:定义缓冲区的数量和每个缓冲区的大小。例如,proxy_buffers 4 16k; 表示有4个缓冲区,每个缓冲区的大小为16k。

client_header_buffer_size 10k;

client_body_buffer_size 100k; #用于读取客户端请求体的缓冲区大小。如果请求体的大小超过这个值,Nginx 会将请求体写入到磁盘上的临时文件中。

large_client_header_buffers 4 64k; #这个指令用于设置处理请求和响应头部时使用的缓冲区数量和大小。当 HTTP 头部超过单个缓冲区的大小时,Nginx 会使用额外的缓冲区。

gzip on; # 启用Gzip压缩。 启用Gzip压缩以减少传输数据量。
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; # 指定哪些内容类型启用压缩。

3 服务器并发超过承载量如何排查?

(1)查看cpu,内存是否打满 top命令

题外话:缓存和缓冲区别

缓存主要用于加速数据读取,通过存储频繁访问的数据副本来减少访问延迟,如本地缓存ehcache,分布式缓存redis等;而缓冲主要用于平滑数据流,通过临时存储数据来解决生产者和消费者之间的速度不匹配问题。

  • **缓存(Cache)**‌:基于时间局部性原理,将常用数据副本存储在高速设备(如CPU缓存或内存)中,以减少对慢速存储介质(如磁盘)的重复访问,从而提升读取效率。例如,CPU缓存存储频繁使用的指令以加速计算。‌‌1‌‌2
  • ‌**缓冲(Buffer)**‌:作为临时存储区,用于协调不同速度设备间的数据传输,确保数据流稳定。例如,视频播放时预加载数据到缓冲区,以应对网络波动,避免播放中断。
相关推荐
Flynn Liang16 分钟前
RAG 评估体系:黄金集、检索指标与 LLM-as-Judge 落地
java·langchain·rag·评估·langchain4j·检索指标
SimonKing1 小时前
Workbuddy太占C盘空间了,写个迁移工具迁走10G的数据
java·后端·程序员
Hvitur2 小时前
Java - Lambda
java·开发语言·python
apcipot_rain7 小时前
C++转Java日记(06)
java·开发语言
金銀銅鐵12 小时前
带您看懂字节码指令(一):一帧里有什么
java·后端·ai编程
nice_lcj52013 小时前
【从零理解 Spring AI · 14】RAG 的四个环节:加载、切分、向量化、检索
java·spring boot·embedding·向量数据库·rag·spring ai·ai应用开发
学长毕设15 小时前
基于springboot科创竞赛信息平台-附源码
java·spring boot·后端
聪明的笨猪猪16 小时前
Java 工程案例:AI 生成 @Async 异步线程池踩坑
java·经验分享·面试·ai编程
学长毕设16 小时前
基于SpringBoot公务员考试交流平台-附源码
java·spring boot·后端
SL_staff18 小时前
私有化低代码:面向强监管行业的可控数字化实践
java·低代码