网易APM Hook方案解析:实现低侵入、细粒度监控
需积分: 0 133 浏览量
更新于2024-07-20
收藏 1.25MB PDF 举报
本文档由网易的郑文撰写,主题围绕网易APM(应用程序性能管理)的hook方案进行深入探讨。作者在2013年至今,服务于网易杭研院的前端技术部,之前还有在阿里云OS-虚拟机组的工作经历。文章主要分为以下几个部分:
1. **背景与选型**:
- 首先,文章分析了APM埋点的需求背景,强调了对低成本、无侵入性和细粒度监控的追求。由于不同的产品可能有各自的基础框架和重复功能埋点,以及源码访问的限制,选择合适的hook方案显得尤为重要。
2. **Ant构建的hook方案**:
- 作者介绍了使用Ant构建工具时的hook方法,通过hook `com.android.dx.command.dexer.Main` 的`processClass` 方法来实现动态埋点,并提及了如何通过添加javaagent参数和修改bytecode来实现监控。
3. **Gradle构建的hook方案**:
- 在Gradle构建中,作者重点讨论了从1.5.0-beta1版本之后的Transform API,这是一种更高级的hook机制,允许在编译阶段对Apk的字节码进行修改,从而植入监控代码。然而,随着多Dex(MultiDex)的引入,可能会遇到NoClassDefFoundError问题,需要特别处理maindexlist.txt文件。
4. **运行期Hook**:
- 文章还涵盖了运行期hook,如动态埋点和系统API的hook,以及针对虚拟机版本兼容性的考虑。这些技术能够在不修改源码的情况下,灵活地在程序运行过程中插入监控代码。
5. **编译期Hook与Agent**:
- 提到了两种类型的Agent:静态Agent(通过`-javaagent`参数)和动态Agent(如`VirtualMachine.loadAgent`),它们分别用于class加载前和运行时对字节码的修改,以实现性能监控。
6. **问题与挑战**:
- 文档指出了一些实践中遇到的问题,例如不同版本的Gradle对hook的处理方式不同,以及如何处理多Dex带来的类加载问题。
总结来说,这篇文档深入剖析了网易在APM监控中使用的hook方案,包括其在Ant和Gradle构建工具中的应用,以及在实际操作中面临的挑战和解决策略。这对于理解和实施类似项目中的性能监控至关重要。
2021-09-18 上传
2019-06-19 上传
2021-01-27 上传
2021-02-03 上传
2021-03-07 上传
2021-05-21 上传
2021-04-07 上传
2021-05-04 上传
2021-03-29 上传
程序猿玄微子
- 粉丝: 3
- 资源: 62
最新资源
- 平尾装配工作平台运输支撑系统设计与应用
- MAX-MIN Ant System:用MATLAB解决旅行商问题
- Flutter状态管理新秀:sealed_flutter_bloc包整合seal_unions
- Pong²开源游戏:双人对战图形化的经典竞技体验
- jQuery spriteAnimator插件:创建精灵动画的利器
- 广播媒体对象传输方法与设备的技术分析
- MATLAB HDF5数据提取工具:深层结构化数据处理
- 适用于arm64的Valgrind交叉编译包发布
- 基于canvas和Java后端的小程序“飞翔的小鸟”完整示例
- 全面升级STM32F7 Discovery LCD BSP驱动程序
- React Router v4 入门教程与示例代码解析
- 下载OpenCV各版本安装包,全面覆盖2.4至4.5
- 手写笔画分割技术的新突破:智能分割方法与装置
- 基于Koplowitz & Bruckstein算法的MATLAB周长估计方法
- Modbus4j-3.0.3版本免费下载指南
- PoqetPresenter:Sharp Zaurus上的开源OpenOffice演示查看器