接口返回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)**‌:作为临时存储区,用于协调不同速度设备间的数据传输,确保数据流稳定。例如,视频播放时预加载数据到缓冲区,以应对网络波动,避免播放中断。
相关推荐
yxlalm5 小时前
Spring AI+RAG 01-项目背景与技术选型
java·人工智能·spring
程序员清风6 小时前
Java 后端高并发设计:线程池、限流、熔断与降级
java·数据库·oracle
Seoyoneh6 小时前
Agentic Workflow编排架构:云客服从“被动响应”迈向“主动执行”的技术实现
java·开发语言·架构
海南java第二人6 小时前
对外 API 如何保证幂等性?插入数据 / 上传表格场景全方案汇总
java·幂等性
tryxr6 小时前
Chat2Excel 文件服务模块上传文件功能开发
java·项目·oss·easyexcel·文件服务
Tangyuewei7 小时前
Java 写 Agent:模型只是组件
java·开发语言
彧azz7 小时前
Java学习语法篇:变量
java·学习
信誓旦旦的程序猿9 小时前
【量化系统从零构建 #04】存储设计:选型·建库·交易日历
java·人工智能·python·股票数据api·股票数据·股票数据api接口·股票api数据接口
yurenpai(27届找实习中)9 小时前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
Flynt10 小时前
把公司项目迁到 Spring Boot 4.0:编译通过只是开始
java·spring boot·后端