接口返回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)**‌:作为临时存储区,用于协调不同速度设备间的数据传输,确保数据流稳定。例如,视频播放时预加载数据到缓冲区,以应对网络波动,避免播放中断。
相关推荐
野犬寒鸦3 小时前
从零起步学习MySQL || 第九章:从数据页的角度看B+树及MySQL中数据的底层存储原理(结合常见面试题深度解析)
java·服务器·数据库·后端·mysql·oracle·1024程序员节
Coding_Doggy4 小时前
苍穹外卖是如何从0搭建一个标准的 Maven 多模块项目的?
java·数据库·maven
Jing_jing_X4 小时前
Spring Boot 启动时,JVM 是如何工作的?
java·后端·spring·1024程序员节
小满、4 小时前
什么是栈?深入理解 JVM 中的栈结构
java·jvm·1024程序员节
Le1Yu4 小时前
ElasticSearch倒排索引、ES核心概念、JAVA集成ES操作
java
西部风情7 小时前
聊聊并发、在线、TPS
android·java·数据库
顾漂亮9 小时前
Token快过期的三种续期方案
java·spring·状态模式
牢七11 小时前
mwf攻防。
java
不爱编程的小九九11 小时前
小九源码-springboot088-宾馆客房管理系统
java·开发语言·spring boot