当前位置:恩施知识网 > 电脑百科 > 正文

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

摘要:此次定位,颇为复杂,而且有时让人没有思路,因为同一个接口,换一个环境又好使了,又不敢去怀疑代码;然而有问题的环境,换一个接口也好使了,又不得不怀疑代码
本文分享自华为云社区《一次网络请求超时分析-云社区-华为云》,作者:xiewenci 。问题现象发起http请求,后端服务接口/v5/iot/11c9c88e6fb26bead43b75514dc380eb/routing-rule/rules?limit=10&marker=ffffffffff&offset=0,一直等待,一分钟后返回响

摘要:此次定位,颇为复杂,而且有时让人没有思路,因为同一个接口,换一个环境又好使了,又不敢去怀疑代码;然而有问题的环境,换一个接口也好使了,又不得不怀疑代码

本文分享自华为云社区《一次网络请求超时分析-云社区-华为云》,作者:xiewenci 。

问题现象

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

分析过程首先定界,在正常环境和异常环境换一样的版本代码,测试同样接口,但是正常环境正常,异常环境还是等待1分钟,所以觉得是环境问题,于是下一步,抓包分别再异常环境和正常环境抓包,具体流信息见下图:

异常环境的流信息

正常环境的流信息

从图中看出正常环境是,服务端发送响应完成之后,由客户端正常返回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协议的理解。

点击下方,第一时间了解华为云新鲜技术~

华为云博客_大数据博客_AI博客_云计算博客_开发者中心-华为云

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

手机qq上的浏览器打不开网页提示网络连接失败错误代码-34每天都这样

你好。检查一下你的
网络连接
是否打开。信号是否良好。换个接入点。或者是
浏览器
的问题。你可以清楚下浏览器的
缓存
退出然后在打开浏览器试试。再不行的话卸载浏览器下载最新版本的试试。祝愉快。望采纳

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

R 4E 开机显示34错误代码,然后一直点不亮

代码名:0x0000008F
描述:系统无法将磁盘驱动器结合或替换同一磁盘驱动器下目录。
当电脑启动过程中出现如下启动蓝屏代码:stop 0x0000004E,这样电脑是无法启动的,你可以试试安全模式能不能进入系统。
电脑蓝屏原因:
◆错误分析: 当电脑出现stop 0x0000004E,一般是在启动的过程中系统蓝屏(我们称为启动蓝屏)。如果在系统启动和故障恢复中设置了自动重新启动,我们一般看不到stop 0x0000004E。系统会自动重新启动。出现这种蓝屏问题。一般是因为硬件故障引起的,如内存质量不高,用过一段时间后,就会出现这种启动蓝屏。另外,如果新近加了一条内存条,那么更应该引起注意,要么是新加内存条存在质量问题,要不就是与原来的内存条不兼容。
电脑蓝屏解决方法:
◇解决方案: 如果你新近加了一条内存条,请确定你的内存品牌是一样的,如果不一样,有可能是内存和主板存在冲突,如果不是,你则拆开机箱,然后把机箱里的所有数据线和板卡插牢固点看看,如果还是一样,你拔下内存看一下,内存的表面和金手指部分是否沾染灰尘和污垢,如果有你可以用刷子刷一下内存的表面灰尘,然后用橡皮擦清理一下内存的金手指,如果还是一样,如果你的主板上有两条内存,你拔掉一条,然后开机看看。如果还是一样,你再换上另一条,换下那一条开机看看,如果电脑还是出现stop 0x0000004E,就有可能是你的内存损坏。
免责申明:以上内容属作者个人观点,版权归原作者所有,不代表恩施知识网立场!登载此文只为提供信息参考,并不用于任何商业目的。如有侵权或内容不符,请联系我们处理,谢谢合作!
当前文章地址:https://www.esly.wang/diannao/9742.html 感谢你把文章分享给有需要的朋友!
上一篇:钉钉有办法远程打卡,钉钉打卡如何远程操控 下一篇:网教平台的正式退出是时代的产物还是下一个的预警

文章评论