接口返回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)**‌:作为临时存储区,用于协调不同速度设备间的数据传输,确保数据流稳定。例如,视频播放时预加载数据到缓冲区,以应对网络波动,避免播放中断。
相关推荐
qq_297574671 小时前
【实战教程】SpringBoot 实现多文件批量下载并打包为 ZIP 压缩包
java·spring boot·后端
老毛肚1 小时前
MyBatis插件原理及Spring集成
java·spring·mybatis
学嵌入式的小杨同学1 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
lang201509281 小时前
JSR-340 :高性能Web开发新标准
java·前端·servlet
Re.不晚1 小时前
Java入门17——异常
java·开发语言
缘空如是1 小时前
基础工具包之JSON 工厂类
java·json·json切换
追逐梦想的张小年2 小时前
JUC编程04
java·idea
好家伙VCC2 小时前
### WebRTC技术:实时通信的革新与实现####webRTC(Web Real-TimeComm
java·前端·python·webrtc
南极星10052 小时前
蓝桥杯JAVA--启蒙之路(十)class版本 模块
java·开发语言
消失的旧时光-19433 小时前
第十三课:权限系统如何设计?——RBAC 与 Spring Security 架构
java·架构·spring security·rbac