记一次 OutOfMemeory 问题修改

今天测试发现了一个 bug , app 大概每 2 分钟就会重启一次。看了下 log 。分析了下原因。

先说下我们这边的需求:

  1. 我们有个需求,就是在 api 请求失败的时候,需要把请求失败的原因上报给服务器。
  2. 上报请求失败的原因也是一个 api ,它的错误也会上报。

在此 2 条需求基础上,仔细想一想,其实有很大的问题,主要漏洞是会造成一个循环的调用。这个循环调用的逻辑如下:

  1. 某个 api 请求报错
  2. 触发上报错误请求
  3. 上报错误请求也发生了错误
  4. 触发下一次的上报错误请求
  5. 重复 3 - 4 步

当这种情况发生的时候,发生 OutOfMemeory 错误就不难理解了,因为在上报错误请求的时候,申请了比较多的内存,导致短时间内没有内存可以用。

虽然原因找到了,但是奇怪的是为什么上报错误请求会失败?以前没有发现过类似的错误。

我们在上报错误请求里面做了一些容错处理,比如没有网络的时候就不上传。可是我们看 log 发现,网络是连接的,而且后台是正常的,因为其他设备都是正常的,后台同学排查后台是好的。

这就很诡异了,后来在排查的时候,发现打印的 error 信息是 can not send to 192.168.xxx.xxx outtime xxx,这个 ip 看着像是一个局域网的 ip。联想到,之前报了一个 bug ,大概是连接 wifi 后,给设备设置代理(随意设置局域网里面的任意设备 ip ),然后无法播放视频,不设置代理就是好的。

初步认定是设置了代理,但是代理(任意设置局域网 ip)没有转发请求的能力,导致请求发送不成功。然后网络是联通的,不会触发上报错误请求停止,最终导致了循环调用,无限消耗资源,导致 OutOfMemory 错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值