android接口调用超时,RCA:收单设备调用云端接口频繁超时排查总结
研发中心/王鹏 2019年7月
关键词:okhttp,安卓,连接复用,开源软件bug
一.背景知识:
okhttp已是安卓项目中被广泛使用的网络请求开源库,它有如下特性:
1.支持http/2,允许所有同一个主机地址的请求共享同一个socket连接;
2.连接池减少请求延时;
3.缓存响应内容,避免一些完全重复的请求;
4.透明的gzip压缩减少响应数据的大小;
其中前三点特性可理解为就是连接复用,但后来发现这里有坑~
二.问题现象:
据现场端反馈,即使在网络正常的情况下,也会有个别设备会在某个时段内出现支付缓慢,多笔交易连续失败的情况。
通过业务保障平台发现订单查询接口一直出现sockettimeoutexception。
三.问题原因:
如果okhttp第一次出现sockettimeoutexception,后续即使网络已经恢复正常,请求也始终返回sockettimeoutexception,必须等到双活域名切换或者重新连接wifi,或重新启动应用程序才能恢复正常。
四.排查过程:
根据以上日志分析,可发现一个规律:切换(双活机房)基础域名时,请求便恢复正常,基本符合okhttp源码中不复用之前连接的条件:
所以我初步怀疑这是连接复用的特性导致的:
即问题出现之后,一直在复用错误的连接,而域名切换之后,不再复用之前的错误连接,于是请求恢复正常。
但项目中的连接池复用一直采用的是okhttp默认设置的配置,未做其他改动,所以怀疑okhttp有bug。
查看okhttp github的issues,发现2019年4月26号新增了一条issues,与我们的问题类似。问题如下:
内容大致意思为:部分设备出现了sockettimeout后,后续请求一直返回sockettimeout,尤其是在4g网络下比较常见!目前该问题仍未解决,处于开放状态,bug依旧存在。
五.解决方法:
在全局 responseerror 监听器里,如果发现出现 sockettimeout 就清空连接池:
目前此方案的缺点是应用程序出现sockettimeout一次,下一次访问才能成功,当前请求无法修正。
后续会持续关注此issues修复状态,及时更新。
七.经验教训:
1.使用第三方开源库,一定要熟悉其原理,在使用前一定要通篇了解其issues中反馈的各种问题,评估其影响,平常定期不定期关注其issues更新。p.s.:郑总的《》,已给我们打过预防针了。
2.做好边界测试和压力测试。
3.一定要重视线上问题,明确根本原因并评估其影响。之前惯性地认为sockettimeout就是网络状况不好导致的,未引起足够重视。
八.rca类型:
开源软件的bug
-eof-
欢迎关注公众号:老兵笔记,讲述那些年我们一起犯过的错
android接口调用超时,RCA:收单设备调用云端接口频繁超时排查总结相关推荐
- 常用物流快递单号查询API接口对接net源码示例_快递鸟
零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...
- 快递单号查询API接口对接net源码示例_快递鸟
零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...
- 快递单号查询API接口对接Java源码示例_快递鸟
零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...
- 华为设备接口视图_华为设备的交换机接口类型介绍及配置
博文大纲: vlan是什么? 华为交换机的三种接口模式: 1.access模式. 2.trunk模式. 3.hybrid模式. hybrid接口的工作原理. 华为设备的各种接口模式应用场景及配置. 一 ...
- 拉卡拉智能POS收单渠道前景如何?
目前,精准客户已经成为各大商家拓宽消费群体最有价值的资源,如何挖掘潜在客户的最大价值成为各大商家关注的重点.特别是在当前大众消费能力不断提升,消费选择持续增加的大环境下,第三方支付平台肩负着重要职责, ...
- 拉卡拉支付辅助商户拓宽收单渠道
目前,精准客户已经成为各大商家拓宽消费群体最有价值的资源,如何挖掘潜在客户的最大价值成为各大商家关注的重点.特别是在当前大众消费能力不断提升,消费选择持续增加的大环境下,第三方支付平台肩负着重要职责, ...
- 华为设备的交换机接口类型介绍及配置
博文大纲: vlan是什么? 华为交换机的三种接口模式: 1.access模式. 2.trunk模式. 3.hybrid模式. hybrid接口的工作原理. 华为设备的各种接口模式应用场景及配置. 一 ...
- 顺丰快递单号查询API接口调试demo【快递100API接口】
顺丰目前提供了两种对接方式: 一种是开发者自助对接,需要注册丰桥账户后,申请成为开发者,再根据顺丰要求对接,整个流程较为繁琐: 还有一种方式就是通过第三方快递单号查询API接口服务商对接(例如快递10 ...
- 免费电子面单Api_快递鸟接口JAVA对接调用案例
电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印电子面单. 一. ...
最新文章
- SQL Server 存储过程的分页方案比拼
- python共享内存和分布式实现异步加载数据
- git Rebase 代替合并
- JMS (Java消息服务) 入门教程
- TCP/IP及内核参数优化调优(转:https://www.cnblogs.com/jking10/p/5472386.html)
- HBuilder:最快的Web开发IDE
- 用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码
- 如何实现实时文本过滤
- mysql 的 select into 带来的错误数据问题
- mysql表情存储报错问题
- 架构之美–开放环境下的网络架构
- 理解Aode Air,理解RIA开发
- SCC算法求强连通分量简单讲解证明及实现
- 分析整装台式机是否物有所值
- java系列之:获取当前时间和当前时间上一个小时的时间
- HTML、CSS、JS(JAVA Sprict)
- 在 Win10 系统下安装 JDK 及配置环境变量的方法
- Java课程设计项目 客户信息管理软件 客户信息管理系统的实现
- 前端代码实现的一个消除类型的图片滑滑乐小游戏分享
- 初等数论初步——最大公因数
热门文章
- Matlab画箭头arrow.m
- Python库:random库
- web前端基础(08html5新标签)
- 一段程序结束等待进行下一段程序_c++实战篇(十二),debug调试程序
- numa节点_NUMA架构下的内存访问延迟区别!
- 神经网络模型中有什么样的算子_浅析图卷积神经网络
- 使用Addressable更好的管理内存
- Unity 2019.1 中文更新日志速览版
- OpenShift 4 - DevSecOps (2) - 修复 RHACS 发现的安全隐患
- 配置实体框架DbContext的可扩展方案