初学APM 行用性能管理/监控

初学APM(未完待续)

紫愿_人间尽好,一个致力于大二暑假进大厂实习的少年,初次写作于2022/1/18

APM是什么

参考百度百科和[《微服务时代,你还不懂APM?》](APM (Application Performance Management) 即应用性能管理(应用性能监控))@鲁强QIANG中的解释

APM全称Application Performance Management & Monitoring(应用性能管理/监控)。

APM功能

线上监控客户端性能,采集客户端运行时的性能数据,找到客户端运行时客户端和服务器的性能短板,在还未发生错误的时候进行修改优化,针对性地优化用户体验。

APM工作流程

  1. 客户端(Android,iOS,Web)收集数据;
  2. 将数据上报服务器;
  3. 服务器将收集到的数据进行存储、建模、挖掘分析,最后将数据可视化用于项目负责人决策;
客户端收集数据

客户端数据收集分为三个步骤:

  1. 数据采集
  2. 数据存储
  3. 数据上报

最重要的就是数据采集工作,是整个APM框架的基础。数据上报就是将采集到的数据存储后经过整理,可以使用 json、__xml__或者__与后台约定的上传策略__上报服务器。

数据采集

采集__程序内部执行过程__、__服务器之间链路调用__等情况,程序内部执行过程包括但不限于设备运行时核心频率、帧率、设备温度和事件日志等信息。服务器之间链路调用包括但不限于链接之间的延迟、优先选择的服务器等。可以精确定位程序运行速度慢,卡顿的原因。APM最常见被用于对web服务器中一次请求处理过程的追踪,采集包括内部执行逻辑、外部服务的调用及它们相应的耗时等信息。

数据采集的方式对比:
手动埋点自动化埋点
优点可以精细化确定埋点位置工作量小,使用灵活,能覆盖绝大多数场景,使用时只需要写好预先的脚本,通过Javassist、ASM等框架就可以修改字节码(字节码插桩)实现自动化埋点。
缺点工作量非常大,不灵活,无法覆盖所有场景
怎么样实现自动化埋点,这就需要提到APP打包流程

我们先看看官网给出的.apk文件从源码的构建流程:

请添加图片描述

以文字的形式总结一下有七个部分:

  1. 打包资源文件,生成R.java文件

  2. 处理aidl文件,生成相应的.java文件

  3. 编译项目源码和第1,2条生成的.java文件,生成.class文件

  4. 将以上三种方式生成的.class文件转化为classes.dex文件

  5. 打包生成APK文件

  6. 对APK文件进行签名

  7. 对签名后的APK文件进行对齐处理

而对字节码的修改则是在.java源码编译成**.class之后,.class编译成.dex**以前进行字节码插桩工作,Android Gradle Plugin 1.5及以上版本中,Google官方提供了 transform api 作为字节码插桩的入口。只需要实现一个自定义的 Gradle Plugin,然后编译阶段再去修改字节码文件。

目前字节码插桩常用的框架:

主要有两种:

  • Javassist
  • ASM

二者的优缺点表格对比:

JavassistASM
介绍开源,能分析、修改和创建Java字节码,有源码级别的API可以直接使用Java进行编辑,不需要深入了解JVM、Dalvik或者Art指令知识;同时也有字节码级别的API。与Javassist类似,可以修改和创建Java字节码。有两种具体方式:
1. 直接产生虚拟机需求的二进制字节码;
2. 在虚拟机类加载阶段前进行动态修改类。
优点相较于只有在字节码层级修改API的ASM,Javassist有可以在源码层级使用的API,不需要掌握Java字节码和虚拟机相关知识点,学习成本低。利用ASM框架在字节码层级进行修改,不像Javassist中使用大量反射,因此拥有性能上的优势。同时ASM不使用反射,可以实现无痕埋点。

综合以上观点,ASM具有无痕埋点,性能较高的特点,相较于Javassist来说,是APM的首选

数据收集的实现流程

.class文件编译为.dex文件过程中,调用Google Plugin中的gradle transform api遍历class文件,使用预先写好的Javassist或者ASM框架修改字节码,即可完成数据采集器的字节码插装。


具体思路、实现代码和不同框架性能对比需要等到实际项目阶段实现阶段才能更新。


紫愿_人间尽好,一个致力于大二暑假进大厂实习的少年,初次写作于2022/1/18

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

紫愿_人间尽好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值