当前位置:   article > 正文

各大厂与卡顿和ANR的战斗记录篇_android 卡顿 和 anr,2024年最新kotlin开源

各大厂与卡顿和ANR的战斗记录篇_android 卡顿 和 anr,2024年最新kotlin开源

答案是只有11%,惊讶不。原因就是在在0-4.5和4.5到9这两个周期内那些空闲的时间,消息都有可能被消费掉!这种情况我们就监控不到了。想想,你再想想,真的是佩服腾讯工程师严谨的工程作风。

  • 另外,该篇全面的的提供了监控主线程卡顿的方案,包括
  • 主线程Message处理的耗时,使用的是设置Looper Printer的方案,Android10以后我们可以通过设置Observer监控
  • IdleHandler耗时的监控,通过hook MessageQueue _mIdleHandlers_实现。
  • TouchEvent的耗时监控,通过PLT Hook。这一块要注意,TouchEvent的事件分发是不通过Handler机制,而是直接native层调到java层分发给View的,如果这个知识点不清楚的小伙伴注意了,又有新知识学习了。
2.2 第二篇文章

很是精彩,ANR如何产生,系统源码实现,找监控方案直接一套组合拳,可见功底深厚大佬就是大佬。

其中,通过监听SIGQUIT信号并过滤误报最终监控ANR的方案,也是当前主流的正规方案,为什么是加一个正规的修饰词呢,想想ANRWatchDog那种多不正经就知道这个有多正规。

这里面,几个重要的点我列下

  • 监听SIGQUIT信号,需要注意重新发送出去
  • 梳理系统ANR的过程中,发现的ANR Trace 通过hook手段可以拿到

这就是微信团队出的关于Android卡顿和ANR的两篇经典文章,建议大家自信研读,卷起来!

3 钉钉技术团队

2022年12月份,钉钉团队发表的ANR 问题的解决方案系列文章。

  • 《钉钉 ANR 治理最佳实践 | 定位 ANR 不再雾里看花》
  • 《让 nativePollOnce 不再排名第一 | 钉钉 ANR 治理最佳实践》
  • 《钉钉 ANR 实战踩坑与经验总结 | 钉钉 ANR 治理最佳实践》
3.1 ANR 判定

作为ANR问题不可避免的两个问题

  • 文章也是分析了系统ANR 的流程
  • 判定ANR的方案也是通过监听SIGQUIT 并过滤误报的方式。
3.2 工具建设

监控ANR 的方案思路与今日头条基本一致,采集主线程的调度信息做记录。其中也有一些不同,把主线程调度的分类,以下五类

  • 主线程的消息调度
  • IdelHandler 调度
  • IDLE 状态
  • 触摸事件
  • 传感器事件

可见,其在主线程任务调度的方面监控的更加具体,今日头条的Raster工具从博文看只是对主线程的消息调度进行了监控,我们在结合微信团队的卡顿监控方案,其实可以更全面的对主线程任务进行调度,这一点很知道借鉴学习。

此外,博文里还提出有些手机厂商在应用进程会进入冻结状态,APP 回到前台后才继续执行,冻结的过程里会导致任务耗时过长,需要单独记录,不过这一点今日头条的方案,里能够通过CPUTime 和WallTime 识别出来。

其他方面,ANRCanery 采集也会采集过去当下和等待的任务调度,也对会采集的消息进行聚合处理。堆栈采集上,也是采用了时间对齐方案对堆栈进行采样。

3.3 实践分享
  • 结合具体场景分享了一些死锁场景,Barrier消息泄露场景等。
  • 还分享了工具建设的心得,很有启发性。 ​

4 其他团队

4.1 阿里其他技术团队
4.1.2 闲鱼团队

2021年6月份, 《关于闲鱼的ANR治理,我有几条心得》

文章短小精悍

  • 【监控】监听SIGQUIT信号 ​
  • 【排查】搭建了ANR Info收集和主线程Message监控。 ​
  • 【优化】给出了三个在借助排查工具的优化案例。 ​
3.3 手淘技术团队

《手淘 Android 帧率采集与监控详解》
手淘团队2022年1月份,提出了Android [滑动帧率]思路并给出了比较详细的监控方案。

4.2 shopee 团队

2022年8月份 LooperMonitor

《Android 卡顿与 ANR 的分析实践》

  • ANR的判定: 也是通过SIGQUIT +过滤的方式。
  • ANR的监控 :主线程的监控思路与今日头条和字节跳动一致,记录主线程的调度信息,也是有聚合的策略。

值得注意的点:

  • 文章里重点提出了对消息的记录使用了池化技术,减少内存重复分配问题。
  • 采集堆栈的方案上,这里提到了利用Kotlin协程非堵塞式挂起特性实现了高效的采集。该方案并没有具体展开如何实现的。同时采集阈值线性增加。
  • 对Looper Message的监控,在 Android api ≥ 28 时,Looper 中新增了一个 Observer 的接口,采用元反射的方式,减少了通过Looper Printer 拼接Message带来的性能损耗。
4.3 毒物团队

2021年9月份得物团队发表了ANR监控文章

《得物技术 | 得物App ANR监控平台设计》

  • ANR判定使用了爱奇艺的XCarash因而能采集到tomsbtone信息 ​
  • 主线程消息回溯采集思路与其他家类似。 ​
  • 毒物搭建了ANR分析平台,数据可视化,有一定的参考意义

5 多说一些抓栈问题。

java层面直接通过thread.getStackTrace()获取堆栈信息,是有一定损耗的,对此我们看到大家常规的做法是控制采集的频率,shoppe团队提到的由协程的非堵塞式挂起实现高效的线程堆栈采集,对此我是持怀疑态度

业内确实对高效采集堆栈方向有探索,给出了高效的抓栈方案,妥妥的黑科技看到了比较优秀的两篇供大家参考。

  • 《西瓜视频稳定性治理体系建设三:Sliver 原理及实践》
  • 网易云音乐《不一样的Android堆栈抓取方案》

总结

纵观各厂在卡顿和ANR 方面做的探索和方案,我们可以看出,思路上都有重合,在细节方面做了很多针对自身业务和实际情况做的针对性的优化和个性化的开发。总的来说逃不出以下几个步骤

  • ANR的感知上:业界主流的方案就是监听SIGQUIT 信号+误报过滤。腾讯技术团队,提到的OV 厂商对ANR的处理并不是常规的处理,而是做闪退处理,所以要以check主线程正在处理的 Message,延误时间作为辅助防止漏报。
  • 信息采集上:由于发生ANR 时,主线程正在处理的任务可能并不是发生ANR的真正原因,因而需要对主线程任务过往调度进行统计记录,同时对消息进行监控,监控的类型,其实微信团队卡顿方案监控给出了全面的方案。需要对消息进行聚合处理。任务的执行栈抓取,控制频次,也有团队给出了高效抓栈方案。另外,出了主线程调度消息外,系统负载情况信息对我们分析ANR 很重要,因为ANR 发生的原因可不仅仅是主线程执行了耗时任务。
  • 问题解决:全面准确的信息采集的基础上,会让找出问题解决问题工作变得更简单,各团队也给出了思路和案例,参考性很高。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数HarmonyOS鸿蒙开发工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年HarmonyOS鸿蒙开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上HarmonyOS鸿蒙开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)
img

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注鸿蒙获取)**
[外链图片转存中…(img-MSrqX49N-1712754713913)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/454224
推荐阅读
相关标签
  

闽ICP备14008679号