专栏首页微信终端开发团队的专栏微信自研 APM 利器,Matrix 正式开源了

微信自研 APM 利器,Matrix 正式开源了

Matrix 是一款微信研发并日常使用的 APM (Application Performance Manage) ,当前主要运行在 Android 平台上。Matrix 的目标是建立统一的应用性能接入框架,通过对各种性能监控方案快速集成,对性能监控项的异常数据进行采集和分析,输出相应问题的分析、定位与优化建议,从而帮助开发者开发出更高质量的应用。

在经历微信内 1 年多的验证与迭代,现在 Matrix 终于开源了:

https://github.com/tencent/matrix 

欢迎 Star,  提 Issue 和 PR。

Matrix 有哪些功能?

Matrix 当前监控范围包括:应用安装包大小,SQLite 操作优化,帧率变化,卡顿,启动耗时,页面切换耗时,慢方法,文件读写性能,I/O 句柄泄漏, 内存泄漏等。

APK Checker 

APK Checker 是针对 Android 安装包的分析检测工具,根据一系列设定好的规则检测 APK 是否存在特定的问题,并输出较为详细的检测结果报告,用于分析排查问题以及版本追踪。当前,APK Checker 主要包含以下功能:

  • 读取 manifest 的信息
  • 按文件大小排序列出 APK 中的所有文件
  • 统计方法数
  • 统计 class 数目
  • 检查是否经过资源混淆(AndResguard)
  • 搜索不含 alpha 通道的 png 文件
  • 搜索未经压缩的文件类型
  • 检查是否包含多 ABI 版本的动态库
  • 统计 APK 中包含的 R 类以及 R 类中的 field count
  • 搜索冗余的文件
  • 检查是否有多个动态库静态链接了 STL
  • 搜索 APK 中包含的无用资源
  • 搜索 APK 中包含的无用 assets 文件
  • 搜索 APK 中未经裁剪的动态库

SQLite Lint

SQLite Lint是一个 SQLite 使用质量的自动化检测工具,犹如一个 SQLite 优化高手在开发或者测试过程中不厌其烦地、仔细地 review 你的 SQL 语句,是团队高质量 SQLite 实践中的一个有用工具。SQLite Lint 当前支持的检测能力包括:

  • 检测索引使用问题
  • 检测冗余索引问题
  • 检测 select * 问题
  • 检测 Autoincrement 问题
  • 检测建议使用 prepared statement
  • 检测建议使用 without rowid 特性

Trace Canary 

Trace Canary 通过 choreographer 回调、编译期插桩的方式,实现了高准确率、高性能的卡顿检测、定位方案,并扩展支持了多个其它流畅性指标,包括:

  • 界面流畅性评估
  • 卡顿定位
  • ANR监控
  • 应用启动及界面切换耗时监控

Resource Canary 

Resource Canary 是基于 Weak Reference 的特性和 Haha 库开发的 Activity 泄漏和 Bitmap 重复创建检测工具。其中检测采集部分部署在客户端,分析部分部署在服务端,通过分离检测和分析两部分逻辑使该工具的流程对持续集成更友好。当前 Resource Canary 主要包含以下功能:

  • 检测疑似泄漏的 Activity ,输出其类名和引用链
  • 检测内存中图像数据完全一样的重复 Bitmap 对象,输出其类名和引用链

IO Canary 

IO Canary 是一个在开发、测试或者灰度阶段辅助发现 IO 问题的工具,目前主要包括文件 IO 监控和 Closeable Leak 监控两部分,提供了 IO 的大盘监控,从而做到心中有数。具体功能包括:

  • 检测主线程 IO 使用不当
  • 检测读写 Buffer 过小
  • 检测重复读操作
  • 检测 Closeable Leak 操作,包括文件读写、cursor 未及时关闭等

Matrix 有哪些优势?

与常规的 APM 工具相比,Matrix 拥有以下特点:

APK Checker

  • 具有更好的可用性:JAR 包方式提供,更方便应用到持续集成系统中,从而追踪和对比每个 APK 版本之间的变化
  • 更多的检查分析功能:除具备 APKAnalyzer 的功能外,还支持统计 APK 中包含的 R 类、检查是否有多个动态库静态链接了 STL 、搜索 APK 中包含的无用资源,以及支持自定义检查规则等
  • 输出的检查结果更加详实:支持可视化的 HTML ,便于分析处理的 JSON ,自定义输出等等

SQLite Lint

  • 接入简单,代码无侵入
  • 数据量无关,开发、测试阶段即可发现SQLite性能隐患
  • 检测算法基于最佳实践,高标准把控SQLite质量
  • 底层是 C++ 实现,支持多平台扩展

Resource Canary

  • 分离了检测和分析部分,便于在不打断自动化测试的前提下持续输出分析后的检测结果
  • 对检测部分生成的 Hprof 文件进行了裁剪,移除了大部分无用数据,降低了传输 Hprof 文件的开销
  • 增加了重复 Bitmap 对象检测,方便通过减少冗余 Bitmap 数量,降低内存消耗

Trace Canary

  • 编译期动态修改字节码, 高性能记录执行耗时与调用堆栈
  • 准确的定位到发生卡顿的函数,提供执行堆栈、执行耗时、执行次数等信息,帮助快速解决卡顿问题
  • 自动涵盖卡顿、启动耗时、页面切换、慢函数检测等多个流畅性指标

IO Canary

  • 接入简单,代码无侵入
  • 性能、泄漏全面监控,对 IO 质量心中有数
  • 兼容到 Android P

未来规划

  • 内外同源,持续完善功能,增加新的监控项,如电量,线程资源,内存监控等等
  • 平台扩展,提供 iOS 等多语言 SDK
  • 打造一套完整的云解决方案

开源地址

Matrix:  https://github.com/tencent/matrix

请给 Matrix  一个 Star !

欢迎提出你的 issue 和 PR

本文分享自微信公众号 - WeMobileDev(WeMobileDev)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-12-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 我们等你来

    微信终端开发团队 2018 暑期实习 微信终端开发团队(公众号:WeMobileDev),主要负责 iOS / Android / Windows / Mac...

    微信终端开发团队
  • SQLite虚拟机

    1 前言 本文主要介绍SQLite虚拟机VDBE,为了更好地了解SQLite虚拟机,文中也加入了一些Lua虚拟机内容来对比学习,更好地了解不同虚拟机之间的异同...

    微信终端开发团队
  • 微信 SQLite 数据库修复实践

    微信在后台服务器不保存聊天记录,微信在移动客户端所有的聊天记录都存储在一个 SQLite 数据库中,一旦这个数据库损坏,将会丢失用户多年的聊天记录。

    微信终端开发团队
  • 当免疫遇上大样本多组学

    主要想研究TNBC微环境的异质性表型是否存在以及是什么基因组事件导致了这种事情的发生,作者收集了386个TNBC病人样本,这个也是目前最大的单中心的TNBC队列...

    百味科研芝士
  • CVPR 2018视频行为识别挑战赛结果出炉:前三名均由国内团队包揽

    Moment 是由 MIT-IBM Watson AI Lab 开发的研究项目。该项目致力于构建超大规模数据集来帮助 AI 系统识别和理解视频中的动作和事件。

    朱晓霞
  • Frame.io 使用 Falco 为视频云建立完整的安全程序

    Frame.io 的全部工作负载,包括视频内容客户,都在使用 Docker 容器中运行的平台。“容器上线,火力全开,” Frame.io 副总裁兼信息安全和基础...

    CNCF
  • vue + axios 调取天气api

    kirin
  • 手把手带你实现一个最精简的响应式系统来学习Vue的data、computed、watch源码

    记得初学Vue源码的时候,在defineReactive、Observer、Dep、Watcher等等内部设计源码之间跳来跳去,发现再也绕不出来了。Vue发展了...

    ssh1995

扫码关注云+社区

领取腾讯云代金券