Matrix代码零侵入自动埋点
本文链接:https://blog.csdn.net/feather_wch/article/details/131693055
包含内容:
应用启动流程与卡顿监控的关系
卡顿监控原理分析与缺陷
微信是如何实现卡顿监控的
无侵入埋点技术实践
抛出问题
遇到卡顿问题怎么办?
- 用工具进行分析
- CPU Profile
- Systrace
- layoutinspect
性能优化和framework原理学习区别
- fm变动少
- 性能问题可能原因千奇百怪,需要丰富实践经验
** 用户使用App很卡,怎么解决?**
- 线上监控
- 线下复现
1、Bugly是什么?友盟?
- 异常监控平台(Crash、exception)
卡顿监控
2、卡顿监控?
- 目的:在用户卡顿时,直到当前在执行什么代码,帮助分析解决卡顿问题
如何判断程序是否发生卡顿?
如何堆栈采集?
卡顿判定
3、基于Looper卡顿判定原理
- Andorid事物基于Looper处理消息,处理消息耗时,必然导致卡顿
- 设置Printer-setMessageLogging(xxx),第一次回调logging.println记录开始时间并startDump,第二次回调记录结束时间并stopDump,可以估算MSG执行时间
- 【Matrix方案】Looper卡顿监控、 Choreographer做帧率监控
- 【BlockCanary】Looper卡顿监控
- 【360 Argus Apm】Choreographer
4、BlockCanary卡顿监控缺陷
- 没办法判断到底是哪个方法出现的问题,粒度太大不精准
5、如何优化Looper卡顿监控
- 给每个业务代码,字节码插桩
6、Matrix使用
- matrix中日志变成了数字和时间,需要mapping文件进行还原。减少数据量
7、Matrix每个业务方法增加入口和出口方法,是如何实现时间统计的?
- 字节码茶庄加入I、O方法,时间每次查询性能太差。
- 有HandlerThread时间总线去获取5ms更新一次
时间总线
扩展知识
App启动流程
- Launcher进程->SystemServer进程->(LocalSocket)fork进程->App进程<—>SystemServer(AMS/ATMS)
- startActivity->startProcessLocked->fork->attachApplication->bindApplication->schduleLauchActivity
- ApplicationThread和ActivityThread
fork和多线程
- 系统不能使用Binder
- 发散 => KOOM线上内存监控,Leakcanary Dump消耗性能,暂停所有线程
- 采用fork出子进程并且dump,因为内存信息完全一样,所以可以用于分析。
- 实战时:出现子进程不能正常执行了 -> Java天生是多线程的,有守护线程,fork和多线程
- dump源码中会suspendAllThread,但是子进程中线程只是对象并没有运行会出错。
- fork前suspendAllThread,再fork,fork出的子进程中线程本身已经是suspend状态,所以调用suspendAll方法不会出现问题。
- 主进程在fork后立马恢复线程即可,可以做自己的事情
- fork => 来源于 安卓6.0前保活技术,就采用的fork技术
Relinker文章来源:https://www.toymoban.com/news/detail-553500.html
- 现场部署了Apk,但是需要更新so,设备问题,就网络配好so,下载并且加载???
腾讯小视频直播在Android端采用了LocalSocket文章来源地址https://www.toymoban.com/news/detail-553500.html
- IPC通信方案:Binder、LocalSocket、MMKV、SharedMemory、Pipe
- 模拟音视频传输,每16ms发送一次序列化后数据对象,大小为3K/4M/10M 三档位
- 时间范围:发送前时间戳,收到并反序列化成对象的时间戳,之间差值为传输延迟
- LocalSocket在三种数据档位,是最好的。远低于10ms。
- Binder(XIPCInvoker)和MMKV:10M数据延迟太大了
到了这里,关于Matrix代码零侵入自动埋点的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!