Matrix代码零侵入自动埋点

Matrix代码零侵入自动埋点

本文链接:https://blog.csdn.net/feather_wch/article/details/131693055

包含内容:
应用启动流程与卡顿监控的关系
卡顿监控原理分析与缺陷
微信是如何实现卡顿监控的
无侵入埋点技术实践

抛出问题

遇到卡顿问题怎么办?

  • 用工具进行分析
  1. CPU Profile
  2. Systrace
  3. layoutinspect

性能优化和framework原理学习区别

  • fm变动少
  • 性能问题可能原因千奇百怪,需要丰富实践经验

** 用户使用App很卡,怎么解决?**

  • 线上监控
  • 线下复现

1、Bugly是什么?友盟?

  1. 异常监控平台(Crash、exception)

卡顿监控

2、卡顿监控?

  1. 目的:在用户卡顿时,直到当前在执行什么代码,帮助分析解决卡顿问题

如何判断程序是否发生卡顿?

如何堆栈采集?

卡顿判定

3、基于Looper卡顿判定原理

  1. Andorid事物基于Looper处理消息,处理消息耗时,必然导致卡顿
  2. 设置Printer-setMessageLogging(xxx),第一次回调logging.println记录开始时间并startDump,第二次回调记录结束时间并stopDump,可以估算MSG执行时间
  3. 【Matrix方案】Looper卡顿监控、 Choreographer做帧率监控
  4. 【BlockCanary】Looper卡顿监控
  5. 【360 Argus Apm】Choreographer

4、BlockCanary卡顿监控缺陷

  1. 没办法判断到底是哪个方法出现的问题,粒度太大不精准

5、如何优化Looper卡顿监控

  1. 给每个业务代码,字节码插桩

6、Matrix使用

  1. matrix中日志变成了数字和时间,需要mapping文件进行还原。减少数据量

7、Matrix每个业务方法增加入口和出口方法,是如何实现时间统计的?

  1. 字节码茶庄加入I、O方法,时间每次查询性能太差。
  2. 有HandlerThread时间总线去获取5ms更新一次
    时间总线

扩展知识

App启动流程

  1. Launcher进程->SystemServer进程->(LocalSocket)fork进程->App进程<—>SystemServer(AMS/ATMS)
  2. startActivity->startProcessLocked->fork->attachApplication->bindApplication->schduleLauchActivity
  3. ApplicationThread和ActivityThread

fork和多线程

  1. 系统不能使用Binder
  2. 发散 => KOOM线上内存监控,Leakcanary Dump消耗性能,暂停所有线程
  3. 采用fork出子进程并且dump,因为内存信息完全一样,所以可以用于分析。
  4. 实战时:出现子进程不能正常执行了 -> Java天生是多线程的,有守护线程,fork和多线程
  5. dump源码中会suspendAllThread,但是子进程中线程只是对象并没有运行会出错。
  6. fork前suspendAllThread,再fork,fork出的子进程中线程本身已经是suspend状态,所以调用suspendAll方法不会出现问题。
  7. 主进程在fork后立马恢复线程即可,可以做自己的事情
  8. fork => 来源于 安卓6.0前保活技术,就采用的fork技术

Relinker

  1. 现场部署了Apk,但是需要更新so,设备问题,就网络配好so,下载并且加载???

腾讯小视频直播在Android端采用了LocalSocket

  1. IPC通信方案:Binder、LocalSocket、MMKV、SharedMemory、Pipe
  2. 模拟音视频传输,每16ms发送一次序列化后数据对象,大小为3K/4M/10M 三档位
  3. 时间范围:发送前时间戳,收到并反序列化成对象的时间戳,之间差值为传输延迟
  4. LocalSocket在三种数据档位,是最好的。远低于10ms。
  5. Binder(XIPCInvoker)和MMKV:10M数据延迟太大了

猜你喜欢

转载自blog.csdn.net/feather_wch/article/details/131693055