实锤证明Fabric OOM-free-session的误报

Fabric 是业界著名的 crash 监控平台,国内外均有不少 app 使用 Fabric 进行 crash 和其他稳定性数据的监控。其中,OOM 率数据也是深受大家关注的数据之一。

但现在,我们通过各 app 间 OOM 率对比、猜测和验证,实锤证明了 Fabric 的 OOM 率有重大误报问题。其中最主要的误报是:Fabric 将用户正常的后台启动误判为了 OOM,导致各 app 的 OOM 率均是大幅偏高的。

OOM 率对比

Fabric 检测 OOM 的原理,参考自 Facebook 的一篇文章:https://code.fb.com/ios/reducing-fooms-in-the-facebook-ios-app/

它在 app 每次启动时,判断了 app 上次进程结束的原因,排除掉 首次安装、app升级、系统升级、crash等原因,最后筛选出前台 OOM 的用户。

Fabric也在文档中特意强调,他们的 OOM-free-session 指标,使用的是前台 OOM 率。也就是说,被 Fabric 捕获到的 OOM 用户,其用户体验预期是与 crash 同样严重的。

 We only report the OOM if the app was in the foreground before the second launch. 

但我们经手的多个产品,在 Fabric 平台上体现的 OOM 率,都比直观感受高很多,在百分之的量级。并且多个产品之间的 OOM 率有明显差距。如果线上用户的实际体验真是如此,那么 OOM 问题的确是非常严重、亟待解决的问题。

猜测

为了定位 OOM 问题,我们曾根据 Facebook 描述的原理,自研过 OOM 监控功能。我们期望通过追查单个用户 OOM 前的操作行为去定位 OOM 发生场景的共性。但当时,我们惊奇地发现,很多用户的行为是:启动 - 再次启动。看起来是用户在启动阶段,就遭遇了 OOM 问题。

这样的用户行为给我们带来了很大困扰。直到我们发现,自研的 OOM 监控中,默认将 app 启动后的状态置为了 foreground 状态。从代码上推测,当用户因 background fetch 等机制触发后台启动时,就有可能被自研 OOM 监控模块判定为 OOM。

对此,我们快速进行了验证,发现,后台启动的确会被自研 OOM 监控判定为前台 OOM。修复这一问题后,我们也对比发现,Fabric 的 OOM 率和 自研组件监控到的OOM率,相差甚远。

于是我们怀疑,Fabric 是不是和我们一开始犯了同样的错误,默认 app 启动后即进入前台,从而将后台启动误判为 OOM 呢?

验证

我们对于以上猜测进行了验证。

由于 Fabric 的 OOM 数据,只有 “版本的 OOM-free-session” 这一项,没有提供更详细的信息,也无法单点追查,我们只能通过打一个特殊版本号的包的方式实验。

至于如何让 app 后台唤起,我们使用的是推送带选项通知的手段。用户在通知中心做这些操作,实际会让 app 在后台短暂唤起。


用这个特殊版本号的包,操作了若干次后台唤起。两天后,我们果然在 Fabric 平台上看到了这个特殊版本号的包,被检测到了 5 次 OOM。但实际上,整个过程中,此包没有遇到任何一次真正的前台 OOM。


据此,我们可以证明,Fabric 至少将用户正常的后台唤起,误报为了 OOM。这显然会造成严重的 OOM 率虚高问题。

与我们有同样困扰的开发者也存在,在追查期间,我们也在 StackOverFlow 上找到了类似的讨论:https://stackoverflow.com/questions/48121843/suddenly-getting-many-fabric-out-of-memory-sessions-can-fabric-oom-reports-ever

而除了将正常后台唤起误报为 OOM 之外,我们从原理和文档上还能判断出,Fabric 至少还将 exit 和 watchdog 误报成了 OOM。

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

推荐阅读更多精彩内容