06 | 卡顿优化(下):如何监控应用卡顿?
该思维导图由 AI 生成,仅供参考
卡顿监控
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了卡顿优化的监控方法,包括消息队列监控、插桩和Profilo三种监控方法。消息队列监控通过向主线程消息队列插入空消息来监控主线程的卡顿情况,但存在一定的误差。插桩监控方法通过在函数入口和出口插入耗时监控代码,实现了对应用内自身函数耗时的监控,但无法监控系统函数调用。最后,介绍了Facebook开源的Profilo库,集成了atrace功能和快速获取Java堆栈的特点,实现了全面的性能监控,但兼容性仍需注意。文章还提到了Android Vitals的性能监控服务,涉及卡顿相关的监控有ANR、启动、帧率三个,以及帧率、生命周期和线程监控的重要性。总结指出,无论采用何种监控方法,最终都能获取到卡顿时的堆栈和CPU运行信息,有助于定位卡顿问题,提高应用性能。文章还强调了对底层技术的深入了解对于技术人员的成长有重要帮助。
《Android 开发高手课》,新⼈⾸单¥59
全部留言(47)
- 最新
- 精选
- 希夷如果给完全没有卡顿的APP打分100的话,对于大厂的APP本来就有90分,追求的是如何将分数提到95,98,99,甚至100,邵文老师所讲主要也是针对这块;但对于很多想我这样的小公司开发者来说,受人力物力时间所限,想做到的其实是先达到90分,而这块专栏涉及的有限,对于跟我类似的受众不够友好。
作者回复: 其实不是,这个专栏我更关注的是人的成长,而不是具体应用到哪里。 当然可以把知识转化应用到工作中效果会更加好
2018-12-1529 - 雪人老师,看了您这些内容,对我的第一感觉是要对源码很熟悉,那您对学习源码有什么建议吗,(看的晚了,不知道现在评论还会不会回)
作者回复: 看源码还是需要带着目的去看,例如渲染相关,类加载流程,不要漫无目的的去看
2019-03-058 - 小洁请问下,目前有个需求是对卡顿和启动耗时做性能指标线上预警,对于 activity、fragment的生命周期启动耗时的监控数据,还有主线程卡顿堆栈的数据,应该按什么的维度去统计比较合理呢
作者回复: 初期的时候我们不建议一下子铺的太开,一步一步来并且要真正的发现现实的问题。 可以先从卡顿和ANR的捕获先开始做,对卡顿堆栈做聚合排序。启动的话一般只是一个统计指标,或者我们也可以把启动拆成多个步骤作为监控
2019-04-183 - 斑马线老师你好,最学习了你的专栏,准备优化一下项目,用一个第三方开源工具检测了一下,发现项目有大量的“主线程阻塞超过70ms”,请问主线程执行耗时操作,多久才算耗时,该如何定义?
作者回复: 每一帧的时间是16.6ms,看你们的忍耐程度。不过前期可以把这个时间放大一些,例如两秒,三秒。因为如果间隔太小,前期会有非常多报出来,还是先解决比较严重的问题
2019-02-253 - eyeandroid请教下老师,hook抓到的systrace里面有其它进程的信息吗,跟python systrace.py抓到的内容有什么差别
作者回复: 其实信息都是一样的,hook的作用是可以用到线上。但是一般会过滤掉一些信息,只上报最感兴趣的部分
2019-04-242 - 蚂蚁内推+vNanoscope 是什么 方便老师说下吗
作者回复: nanoscope 是 uber 开发的一套 Low overhead trace 工具 https://github.com/uber/nanoscope
2018-12-132 - VK绍文老师,想问下卡顿信息监控上报,有什么策略判断吗,哪些方法函数需要监控,哪些不需要监控?
作者回复: 一般都是全局监控的吧,类似ANR一样
2019-05-181 - 冬有个问题请教 用empty message 去检查卡顿 ,比如1s 没消费 ,就能说message 卡顿1s 吗 ? 如果空消息前边有几个消息 比如3个 ,现在正在执行第三个 我觉得也正常啊 不能说明卡顿啊
作者回复: 我们会把监控消息插入到message的头部,当然也是有可能会出现误报,但是从大数据来说问题不大
2019-01-111 - Kenny张老师,刚试了你给的Sample,plthook实现的自定义ftrace,B与E事件日志不成对?这个怎么看每一个事件的耗时?每个B找最近的E作为截止算时间吗?还是按照一个B对应一个E去算?还有一个问题就是课程提到通过hook thread_create去监控线程,这个是指监控应用的线程吗?如果是的话,那系统的线程比如binder,jit等如何去监控?话说这个张老师能把hook 线程创建的实现也放Sample?
作者回复: 事件是最近匹配 线程hook那个很简单的,我下次放到sample里面
2018-12-131 - EchoSomeTHadb shell objdump /system/lib/libutils.so 提示objdump not found,咋导出来?
作者回复: objdump命令在ndk里面
2019-07-22