局域网下的客户端调用服务接口超时的问题总结

一、准备知识
1、HTTP Keep-Alive
在Http早期,每个http请求都要求打开一个tcp socket连接,并且使用一次之后就断开这个tcp连接
使用keep-alive可以改善这种状态,即在一次TCP连接中可以持续发送多份数据而不会断开连接。通过使用keep-alive机制,可以减少tcp连接建立次数。
当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。

2、客户端okHttp的连接复用
Okhttp中连接复用正是建立在HTTP Keep-alive基础之上实现的,默认为5分钟,支持5个socket连接并发,也就是五分钟内客户端如果和已连接的服务器通信不需要重新三次握手连接(三次握手确保了服务端和客户端都具备可靠的通信能力,但握手过程耗时)。

3、客户端okHttp请求超时

OkHttpClient client = new OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)  // 连接超时
    .writeTimeout(10, TimeUnit.SECONDS)    // Socket写超时
    .readTimeout(30, TimeUnit.SECONDS)     // Socket读超时
    .build();

注意:在2.5.0版本之后,读、写、连接超时的默认值是10s。

4、wireshark抓包分析tcp流

tcp.stream eq  99
ip.src==10.159.63.237 or ip.dst==10.159.63.237
ip contains "api/v1/users/10235"

5、网络设备的相关参数
TCP连接的超时时间
HTTP连接的超时时间

下面贴出我们在用设备的参数默认值


image.png

image.png

二、超时现象描述
用户在平板上使用应用的时候,不定期提示超时报错,再重试一次就正常了。
这种报错比较频繁,操作的应用和功能也不固定,已经很大程度地影响了用户体验。

为了很好地理解下文,这里简单描述下局域网的网络拓扑图。

三、网络拓扑图


image.png

四、分析超时的规律
超时慢,第一反应是可能局域网的网络慢导致接口访问超时。
1、跑测试脚本,看接口的超时率、丢包、连通稳定性等
主要使用了ping 和 curl 两个命令。
###########################################################
访问并没有超时很严重

2、在笔记本电脑上执行ab压测,看响应时间和吞吐量等指标
###########################################################
上面两步均正常,超时率也在可接受的范围。 无论是在有线还是无线, 平板还是笔记本还是说小型服务器上执行测试脚本,再结合网络硬件设备性能偏上,带宽也百兆,始终都无法定位出是网络慢导致的接口访问超时。

3、在平板上开发测试工具,curl真实接口,有请求和有响应数据量的,模拟响应大小10Kb,请求数据随便造一些。
###########################################################
结果仍然是正常的。

4、我们去kibana分析日志报错,看是否有规律可循。
###########################################################
错误超时情况比较分散,没有集中在某个区域,也没有集中在某个用户,更没有集中在某些接口。
唯一总结的一个结论是:使用得多,超时数量就越多。但是晚上很少人使用的时候,也会报很多超时错误。
按照我们以往对网络的指标要求经验,继续分析网络设备参数方面。

5、更换平板,排除是平板硬件导致的超时报错。
###########################################################
换了新平板,超时接口数还是没下降。

6、观察除了超时错误,是否存在应用使用的卡顿问题,也就是慢接口是否也随之增多。
###########################################################
除了偶尔报超时,使用很顺畅。

7、排除网络设备的参数设置的影响,初步去掉上网行为管理中间设备。
更改网络拓扑图如下:


移除上网行为管理设备.png

###########################################################
超时错误并没有什么变化。

8、由于超时错误频繁出现,所以我们一边操作应用,一边使用wireshark抓包记录下来。
观察tcp流的超时到底是超在哪个环节,超时有什么规律。
###########################################################


image.png

http连接在126秒后复用的时候,出现超时。再多观察几个,均是如此。
这里需要串联开篇讲的几个知识点。规律就是连接在空闲后120秒,极大概率出现超时。

9、客户端采用okHttp模拟连接复用、连接不复用的对比测试
###########################################################
连接不复用的时候,超时比例大大降低

10、使用siege模拟分别delay 120秒,delay 180秒
//先请求一次, 延迟120秒后再请求一次。
siege -d 120 -r 2 -c 1 -v http://bgp.test.com

//先请求一次, 延迟180秒后再请求一次。
siege -d 180 -r 2 -c 1 -v http://bgp.test.com
###########################################################
超时现象容易复现,超过120秒,接口就大概率超时。

五、解决超时的办法
超时规律找到了,并且很容易复现,解决方案也自然容易。
1、把客户端okHttp的keep-alive的默认5分钟调整为100秒。

2、更改华为路由器的HTTP连接的超时时间,由120秒延长至300秒以上(大于okHttp的keep-alive的默认5分钟)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,794评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,050评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,587评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,861评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,901评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,898评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,832评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,617评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,077评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,349评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,483评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,199评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,824评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,442评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,632评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,474评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,393评论 2 352