“不敢去怀疑代码,又不得不怀疑代码”记一次网络请求超时分析

RocketMQ请求超时的排查处理过程 从日志分析、源码分析、抓包处理、报文分析、堆栈分析等角度分享一次RocketMQ请求响应慢的排查处理过程。 阅读详情

问题现象

发起http请求,后端服务接口/v5/iot/11c9c88e6fb26bead43b75514dc380eb/routing-rule/rules?limit=10&marker=ffffffffffffffffffffffff&offset=0,一直等待,一分钟后返回响应,且中文乱码显示

分析过程

1.首先定界,在正常环境和异常环境换一样的版本代码,测试同样接口,但是正常环境正常,异常环境还是等待1分钟,所以觉得是环境问题,于是下一步,抓包

2.分别再异常环境和正常环境抓包,具体流信息见下图:

异常环境的流信息

正常环境的流信息

从图中看出正常环境是,服务端发送响应完成之后,由客户端正常返回ACK,然后由客户端发起FIN断链请求。而异常环境则是服务端发送响应完成之后,客户端也回了ACK,但是没有主动发起断链请求,直到超过keep-alive时间之后,由服务端发起了断链请求(因为超时主动断链)。现象是客户端一直在等服务端发送响应(可能没有发送完),所以怀疑服务端有缓存之类,没有及时将响应流发送出去,所以继续查看代码

3.查看代码,在返回客户端的时候,没有flush和close操作,代码如下

然后以为找到问题原因所在了,就尝试修改代码,如下:

增加了flush操作和close操作(放在了try语快中),最后测试执行,还是跟最初的现象一致,还是会等待1分钟后才会返回响应。这时就有点纳闷了,再重新仔细分析下流,其实从流中可以看出来,服务端的响应是立马返回给了客户端的,如下图

既然给了响应,那为什么客户端为什么还要继续等待呢?这里有注意到图中有几个问号,这其实是中文字符乱码了,所以这里又怀疑是不是编码格式导致客户端收到的Content-Length长度和收到的响应的长度不一致,也就是客户端实际收到的响应的长度小于Content-Length的长度,然后一直等待下去,所以继续修改代码

4.修改代码,指定编码格式为UTF-8,代码如下:

替换环境版本,测试执行,响应就立马返回了,果然是这个编码格式的锅

原因回顾

1.编码格式不一致就会导致响应流的实际长度不一致?答案是一定的,编码格式不一致,实际长度就是会不一致,测试结果如下:

2.为什么之前的没有出现过这个问题?是什么原因导致编码格式丢失的

查看后端服务jar包,发现spring版本已经升级到5.2.21.RELEASE,此版本中没有指定默认编码格式为UTF-8

所以需要后端服务去指定编码格式,或者网关服务统一处理

总结与思考

此次定位,颇为复杂,而且有时让人没有思路,因为同一个接口,换一个环境又好使了,又不敢去怀疑代码;然而有问题的环境,换一个接口也好使了,又不得不怀疑代码;还有就是在容器中去调用接口,也是一样的问题,所以感觉又跟网络没啥关系。其实应该静下心来去思考为什么客户端那里一直等待,没有主动发起断链,这里还是说明了对HTTP协议细节,不够熟练掌握,才导致中间走了一些误区,需要去巩固和加深对http协议的理解。

Android 链接4G热点网络第一次请求很慢ipv6地址链接异常分析及解决 网上查了查,答案都指向了DNS解析设置的问题,解析有两种 ipv4 ipv6 ,android默认不支持ipv6解析,之后问了下后台配置,说IOS 的 appstore 审核,必须需要ipv6的配置才能正常进行,所以服务端增加了 ipv6 支持,同时也支持ipv4,但是ipv6的入口再美国,那这样看来,猜测是否是android手机默认通过ipv6去连接后端服务器,绕了一大圈才返回结果?要知道,Android设备的规模已达几十亿,占据了智能手机市场的几乎八成,它不支持IPv6无疑是极大的桎梏。 阅读详情

相关推荐

记录一次超时问题分析

一. 问题现象 商品团队反馈,会员部分 dubbo 接口偶现超时异常,而且时间不规律,几乎每天都有,商品服务超时报错如下图: 超时的接口平时耗时极短,平均耗时 4-5 毫秒。查看 dubbo 的接口配置,商品调用会员接口超时时间是一秒,失败策略是failfast,快速失败不会重试。 会员共部署了8台机器,都是 Java 应用,Java 版本使用的是 JDK 8,都跑在 docker 容器中 。 二. 问题分析 开始以为只是简单的接口超时,着手排查。首先查看接口逻辑,只有简单的数据库调用,封装参

QQsilhonette的博客 335

TCP网络三次握手(链接请求)和四次挥手(断链请求),FIN报文和RST报文

本文直接将直接开始流程,部分东西不在做解释,就是双⽅都把⾃身的序列号发给对⽅,看对⽅能不能接收到。如果「确 认可以」,那就可以正常通信。(三次握⼿这个过程就可以看到双⽅都有接收和发送的能 ⼒)问题 1:两次握手会发送什么情况两次握⼿只能保证客户端的序列号成功被服务端接收,⽽服务端是⽆法确认⾃⼰的 序列号是否被客户端成功接收。问题2:序列号怎么生成的,为什么是随机的⼀⽅⾯为了安全性(随机ISN能避免⾮同⼀⽹络的攻击),另⼀⽅⾯可以让通信双⽅ 能够根据序号将「不属于」本连接的报⽂段丢弃。

一个后端菜鸟的博客 2970

Kafka 学习笔记(一)定位一次Kafka集群读写超时的故障

这是一次kafka集群问题定位的经历,最后发现这个问题其实还挺容易定位到的。只是之前对kafka引擎积累不足,绕了一圈弯路,所以记录下来希望也能帮到其他人。现象救火复盘治理。

m0_37053048的博客 1119

在HTTP通讯过程中,是客户端还是服务端主动断开连接?

比如说:IE访问IIS,获取文件,肯定是要建立一个连接,这个连接在完成通讯后,是客户端Close了连接,还是服务端Close了连接。我用程序测模拟IE和IIS,都没有收到断开连接的消息,也就是都没有触发OnClose事件。我是用Socket建立的连接。如果两方面都没有主动断开连接,那么我猜测可能是传输的数据中有结束的标志,请问这个标志是怎样的?谢谢各位。 解决方案 » 不知道i...

weixin_30885111的博客 2486

Vue+ECharts-GL 3D地图实战:5层叠加打造炫酷中国地图(附完整代码)

本文详细介绍了如何利用Vue和ECharts-GL构建具有强烈立体感的3D中国地图。通过5层图层的巧妙叠加与样式调校,实现了从背景阴影到交互高光的完整视觉层次,并整合了动态飞线与散点标记。文章提供了完整的代码实现、核心配置解析以及性能优化与视觉调优的实战技巧,帮助开发者快速打造专业级的交互式地图可视化应用。

d6e7f8g9h的博客 653

【OTDR曲线工具箱】04 批量生成sor文件

软件下载地址:http://120.78.150.214:9999/isora.zip 通过一个测试数据sor文件,批量生成多个测试文件(基于Bellcore GR196及SR-4731标准)。主要考虑哪些问题: 1、sor测试是否符合要求(主要是衰减系数) 2、多个文件的创建时间 3、文件必须随机处理,不要看省去一模一样。 来说说怎么操作的 第一步:选择参考曲线 参考曲线的选择由两种方法:从文件中导入、从曲线库中选择。 其中曲线库分为公共库和个人库两种,平时浏览的sor文件都可以加载到库中。 第二步

夜晚是传说的博客 5279

记一次对网络抖动经典案例的分析

网络抖动案例是一类处理难度较大的问题,原因主要是很多抖动发生的频率不高,且持续时间非常短极限情况可能仅有100ms以下,而很多用户的业务应用对实时性要求非常高,因此对此类在百毫秒的延迟也会非常敏感。本文记录的是一次多团队协作处理的抖动问题的过程,由于用户的执着,也使得我们在这个案例分析得较为深入,希望对大家今后的此类案例的处理有所启发。 问题现象 让我...

weixin_34319999的博客 4172

Claude + Figma MCP 实战教程

• 拥有 Figma 的 Dev 或 Full seat(专业/企业账号)权限 才能启用 Dev-Mode MCP 服务 。• MCP 是通过标准接口连接 Claude 与 Figma,效率高,但目前仍为 Beta,稳定性可能有限。3. 服务启动后,会在本地运行,比如 http://127.0.0.1:3845/mcp 。如果设置正确,会显示已连接的 figma-dev-mode-mcp-server  。• 如果多次转换复杂组件,可能需要多次选择与多次生成,建议合理拆分设计任务。

weixin_49869937的博客 4451

Socket发送请求“超时”——接收数据方式引起的bug

Socket发送请求“超时”——接收数据方式引起的bug 一、场景描述 前段时间对接某家银行的资管外围系统,测试环境测试通过,联调报告经银行风控部门审批通过,上线时出现严重问题(不能正常发送/接收请求):发送请求成功、接收数据失败并抛出SocketTimeoutException。 对接使用的技术:Socket(接触的两家银行(一家股份制商业银行、一家国有银行(四大行之一))的外

学无止境 1万+

Ubuntu 22.04 实战:为WIFI6网卡Realtek RTL8852BE手动编译驱动指南

本文详细介绍了在Ubuntu 22.04系统上为Realtek RTL8852BE WIFI6网卡手动编译驱动的完整指南。从问题诊断、环境准备到源码获取、编译安装,逐步解决驱动缺失问题,并提供常见问题排查和性能优化建议,帮助用户充分发挥WIFI6网卡性能。

weixin_30808693的博客 480

【扣子AI开发】如何开发一个图像生成智能体?

【扣子AI开发】如何开发一个图像生成智能体,从创建到发布

tl437002770的博客 2428

记一次请求无响应的抓包分析过程

请求链路 问题现象 相同的请求参数,第一次请求没有返回,第二次请求可以正常返回,查看SLB日志有报错invalid chunked response,接着抓包开始分析 一、先做一个两次请求的对比,第一次请求一共传输了10个包,第二次请求传输了13个包 二、对比两次请求的TCP流,总共有三个不同点 1.第一次请求有set-cookie,第二次请求没有,最初怀疑是cookie格式的问题,百度之后排除,cookie的value里边除了|也没有其他特殊的字符。 2.第一次请求是SLB先关闭的连接,第二次是EC

WindValley 2059

YOLOv12改进策略【注意力机制篇】| 添加SE、CBAM、ECA、CA、Swin Transformer等注意力和多头注意力机制

这篇文章带来一个经典注意力模块的汇总,虽然有些模块已经发布很久了,但后续的注意力模块也都是在此基础之上进行改进的,对于初学者来说还是有必要去学习了解一下,以加深对模块,模型的理解。

Limiiiing的博客 1512

记一次连接Redis偶现超时的问题

参考:https://www.phpmianshi.com/?id=118 问题描述 公司老的项目没有任何监控,对于系统的运行健康情况完全不知,于是搭建了2套监控系统,一套sentry监控代码层面的exception,一套cls告警,监控所有系统的状态码,应用日志等。监控系统上线后,就发现有一台跑定时任务的机器,经常偶现报错 RedisException: Connection timed out,一天几十次,也不是固定时间,如下图: 问题分析 于是开始分析为何超时,首先...

tiancityycf的专栏 1395

图文:银行核心账务处理逻辑(白话篇)

银行账务系统分为对内账(记录银行自身资产负债)和对外账(处理客户交易),通过特定编码规则的账号体系进行管理。采用T型账户结构和凭证制度确保每笔交易可追溯,通过明细核算与综合核算双线并行、每日轧账核对(科目日结单、总账、日计表)实现账务精准平衡。从业务触发到最终账平的全流程体现了银行账务"分层记录、双向核对、闭环校验"的核心原则,保障资金流动的透明性与安全性。

银行信息系统应用架构详解 542

小红书图文笔记图像批量爬取:Python爬虫实战与反反爬策略全解析

在当今社交媒体盛行的时代,小红书作为中国领先的生活方式分享平台,积累了海量的优质图文内容。对于数据分析师、市场研究人员或内容创作者来说,能够高效获取这些数据具有重要意义。本文将详细介绍如何使用Python构建一个高效、稳定的小红书图文笔记图像批量爬取工具,涵盖最新技术栈和反反爬策略。本文详细介绍了如何使用Python构建一个高效、稳定的小红书图文笔记图像批量爬取系统。通过结合Playwright、aiohttp等现代工具,实现了从列表页采集到图片下载的完整流程。

2201_76125261的博客 2364

iOS 网络请求断连重试失败?抓包分析丢包原因的完整流程

摘要:iOS App在恢复网络后登录请求丢失的问题排查显示,App缺乏自动重试机制是主因。通过Charles、Sniffmaster、mitmproxy和Wireshark等工具组合分析,确认iOS版本仅在首次点击时发送请求,网络恢复后未触发补发。对比安卓端有重试机制的表现,建议改进iOS App的网络异常处理流程,加入自动补发和用户提示功能。该案例展示了多工具协作定位移动端网络问题的有效方法。(148字)

2501_91373349的博客 781

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

移动端网页调试实战,网络请求延迟与超时问题全链路排查指南

摘要:移动端WebView中接口请求延迟问题常源于容器环境差异。通过案例拆解,发现iOS WebView因TLS握手和DNS解析导致请求延迟达3-5秒,而浏览器仅200ms。借助WebDebugX注入计时脚本和Charles抓包工具,定位到主要瓶颈为证书链验证和DNS缓存策略。解决方案包括预加载HTTPS请求、优化证书链、复用HTTP/2连接等,修复后iOS延迟降至800ms。调试关键在于量化各环节耗时,而非猜测,需结合专业工具实现精准优化。

2501_91373349的博客 928

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

记一次接口超时问题排查

今天生产环境突然出现一个老接口的p95响应耗时超1秒的告警。由于没有任何变更,有点奇怪,于是开始了探索之旅…… 首先常规排错思路,看直接告警信息。告警是ng上的接口响应耗时,由于ng一般只做转发或者负载均衡,没有什么逻辑,除非资源瓶颈和很高并发一般不会有什么压力。而ng的资源消耗都很低,基本排除ng的性能瓶颈导致。接着看nginx.conf 的配置,upstream是一组jetty服务。结合ng上的日志登录jetty服务器查看日志。由于没有记录有效的request 请求日志。至此通过日志链路报错线索中断了…

zpsimon的博客 1691

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

记一次kubernetes集群异常:kubelet连接apiserver超时

本文通过记录kubelet连接apiserver超时问题的原因及修复办法。 上篇文章回顾:一文读懂HBase多租户 背 景 kubernetes是master-slave结构,master node是集群的大脑,当master node发生故障时整个集群都"out of control"。master node中最重要的当属apiserver组件,它负责处理所有请求,并持久化状态到etc...

小米云技术 5247

ping虚拟机请求超时_eBay云计算“网”事 | 网络超时篇

供稿 |eBayIE CloudTeam作者|谢文利 & 李程远编辑 | 顾欣怡本文4316字,预计阅读时间13分钟更多干货请关注“eBay技术荟”公众号导读eBay自2016年开始将业务迁往Kubernetes容器平台,其间遇到了各种网络问题。云计算“网”事系列旨在介绍eBay IE Cloud团队巧妙利用eBPF工具进行排查,并解决这些典型网络问题的事迹。该系列分为...

weixin_39676242的博客 567

记一次生产数据库连接池大量连接超时问题排查

最近一段时间公司业务量上来了,与此同时伴随着程序猿终生的问题出现了。 服务异常总体的表现就是每天不定时间出现访问超时并持续一段时间,偶尔又好了。刚开始出现次数很少,服务中断一小段时间后就自己恢复了。但随着时间推移,这种情况出现频率变高了,而且持续时间也变久了。 老板此时的状态中断服务怎能忍,我打起了12分精神,开始排查问题,既然是数据库连接池抛出的问题,首先检查是不是数据库连接池参数出问题了,有长事务占用数据库连接不释放,并发数过多导致连接池连接耗尽,然后一顿参数调整,发现效果不大, ...

u012448882的博客 2246
上一篇: 架构师之路,从「存储选型」起步
下一篇: Opentelemetry SDK的简单用法
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值