研发中心/王鹏 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:收单设备调用云端接口频繁超时排查总结相关推荐

  1. 常用物流快递单号查询API接口对接net源码示例_快递鸟

    零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...

  2. 快递单号查询API接口对接net源码示例_快递鸟

    零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...

  3. 快递单号查询API接口对接Java源码示例_快递鸟

    零售电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用户打开&quo ...

  4. 华为设备接口视图_华为设备的交换机接口类型介绍及配置

    博文大纲: vlan是什么? 华为交换机的三种接口模式: 1.access模式. 2.trunk模式. 3.hybrid模式. hybrid接口的工作原理. 华为设备的各种接口模式应用场景及配置. 一 ...

  5. 拉卡拉智能POS收单渠道前景如何?

    目前,精准客户已经成为各大商家拓宽消费群体最有价值的资源,如何挖掘潜在客户的最大价值成为各大商家关注的重点.特别是在当前大众消费能力不断提升,消费选择持续增加的大环境下,第三方支付平台肩负着重要职责, ...

  6. 拉卡拉支付辅助商户拓宽收单渠道

    目前,精准客户已经成为各大商家拓宽消费群体最有价值的资源,如何挖掘潜在客户的最大价值成为各大商家关注的重点.特别是在当前大众消费能力不断提升,消费选择持续增加的大环境下,第三方支付平台肩负着重要职责, ...

  7. 华为设备的交换机接口类型介绍及配置

    博文大纲: vlan是什么? 华为交换机的三种接口模式: 1.access模式. 2.trunk模式. 3.hybrid模式. hybrid接口的工作原理. 华为设备的各种接口模式应用场景及配置. 一 ...

  8. 顺丰快递单号查询API接口调试demo【快递100API接口】

    顺丰目前提供了两种对接方式: 一种是开发者自助对接,需要注册丰桥账户后,申请成为开发者,再根据顺丰要求对接,整个流程较为繁琐: 还有一种方式就是通过第三方快递单号查询API接口服务商对接(例如快递10 ...

  9. 免费电子面单Api_快递鸟接口JAVA对接调用案例

    电子面单是一种通过热敏纸打印输出纸质物流面单的物流服务.通过热感应显示文字,打印速度比传统针式打印速度提升4~6倍.电子面单以接口形式嵌入到自己的系统.网站上,可以在自己的平台操作打印电子面单. 一. ...

最新文章

  1. SQL Server 存储过程的分页方案比拼
  2. python共享内存和分布式实现异步加载数据
  3. git Rebase 代替合并
  4. JMS (Java消息服务) 入门教程
  5. TCP/IP及内核参数优化调优(转:https://www.cnblogs.com/jking10/p/5472386.html)
  6. HBuilder:最快的Web开发IDE
  7. 用java写四则混合运算,JAVA写的四则混合运算-JSP教程,Java技巧及代码
  8. 如何实现实时文本过滤
  9. mysql 的 select into 带来的错误数据问题
  10. mysql表情存储报错问题
  11. 架构之美–开放环境下的网络架构
  12. 理解Aode Air,理解RIA开发
  13. SCC算法求强连通分量简单讲解证明及实现
  14. 分析整装台式机是否物有所值
  15. java系列之:获取当前时间和当前时间上一个小时的时间
  16. HTML、CSS、JS(JAVA Sprict)
  17. 在 Win10 系统下安装 JDK 及配置环境变量的方法
  18. Java课程设计项目 客户信息管理软件 客户信息管理系统的实现
  19. 前端代码实现的一个消除类型的图片滑滑乐小游戏分享
  20. 初等数论初步——最大公因数

热门文章

  1. Matlab画箭头arrow.m
  2. Python库:random库
  3. web前端基础(08html5新标签)
  4. 一段程序结束等待进行下一段程序_c++实战篇(十二),debug调试程序
  5. numa节点_NUMA架构下的内存访问延迟区别!
  6. 神经网络模型中有什么样的算子_浅析图卷积神经网络
  7. 使用Addressable更好的管理内存
  8. Unity 2019.1 中文更新日志速览版
  9. OpenShift 4 - DevSecOps (2) - 修复 RHACS 发现的安全隐患
  10. 配置实体框架DbContext的可扩展方案