微信开源框架-崩溃、卡顿和爆内存Matrix
当前工具监控范围包括:崩溃、卡顿和爆内存,包含以下两款插件:
WCCrashBlockMonitorPlugin: 基于 KSCrash 框架开发,具有业界领先的卡顿堆栈捕获能力,同时兼备崩溃捕获能力。
WCMemoryStatPlugin: 一款性能优化到极致的爆内存监控工具,能够全面捕获应用爆内存时的内存分配以及调用堆栈情况。
特性
WCCrashBlockMonitorPlugin
- 接入简单,代码无侵入
- 通过检查 Runloop 运行状态判断应用是否卡顿,同时支持 iOS/macOS 平台
- 增加耗时堆栈提取,卡顿线程快照日志中附加最近时间最耗时的主线程堆栈
WCMemoryStatPlugin
- 在应用运行期间获取对象存活以及相应的堆栈信息,在检测到应用爆内存时进行上报
- 使用平衡二叉树存储存活对象,使用 Hash Table 存储堆栈,将性能优化到极致
使用方法
安装
通过 Cocoapods 安装
- 先安装 CocoaPods;
- 通过 pod repo update 更新 matrix 的 Cocoapods 版本;
- 在 Podfile 对应的 target 中,添加 pod 'matrix-wechat',并执行 pod install;
- 在项目中使用 Cocoapods 生成的 .xcworkspace运行工程;
- 在你的代码文件头引入头文件 #import ,就可以接入微信的性能探针工具了!
通过静态库安装
- 获取 Matrix 源码;
- 打开命令行,在
matrix/matrix-iOS
代码目录下执行make
进行编译生成静态库;编译完成后,iOS 平台的库在matrix/matrix-iOS/build_ios
目录下,macOS 平台的库在matrix/matrix-iOS/build_macos
目录下; - 工程引入静态库:
- iOS 平台:使用
matrix/matrix-iOS/build_ios
路径下的Matrix.framework
,将Matrix.framework
以静态库的方式引入工程; - macOS 平台:使用
matrix/matrix-iOS/build_macos
路径下的Matrix.framework
,将Matrix.framework
以静态库的方式引入工程。
- 添加头文件
#import
,就可以接入微信的性能探针工具了!
启动监控
在以下地方:
- 程序
main
函数入口; AppDelegate
中的application:didFinishLaunchingWithOptions:
;- 或者其他应用启动比较早的时间点。
添加类似如下代码,启动插件:
#import
Matrix *matrix = [Matrix sharedInstance];
MatrixBuilder *curBuilder = [[MatrixBuilder alloc] init];
curBuilder.pluginListener = self; // pluginListener 回调 plugin 的相关事件
WCCrashBlockMonitorPlugin *crashBlockPlugin = [[WCCrashBlockMonitorPlugin alloc] init];
[curBuilder addPlugin:crashBlockPlugin]; // 添加卡顿和崩溃监控
WCMemoryStatPlugin *memoryStatPlugin = [[WCMemoryStatPlugin alloc] init];
[curBuilder addPlugin:memoryStatPlugin]; // 添加内存监控功能
[matrix addMatrixBuilder:curBuilder];
[crashBlockPlugin start]; // 开启卡顿和崩溃监控
// [memoryStatPlugin start];
// 开启内存监控,注意 memoryStatPlugin 开启之后对性能损耗较大,建议按需开启
接收回调获得监控数据
设置 MatrixBuilder 对象中的 pluginListener,实现 MatrixPluginListenerDelegate。
// 设置 delegate
MatrixBuilder *curBuilder = [[MatrixBuilder alloc] init];
curBuilder.pluginListener = <一个遵循 MatrixPluginListenerDelegate 的对象>;
// MatrixPluginListenerDelegate
- (void)onInit:(id)plugin;
- (void)onStart:(id)plugin;
- (void)onStop:(id)plugin;
- (void)onDestroy:(id)plugin;
- (void)onReportIssue:(MatrixIssue *)issue;
各个添加到 MatrixBuilder 的 plugin 会将对应的事件通过 pluginListener 回调。
重要:通过 onReportIssue:
获得 Matrix 处理后的数据,监控数据格式详见:Matrix for iOS/macOS 数据格式说明
Demo
至此,Matrix 已经集成到应用中并且开始收集崩溃、ANR、卡顿和爆内存数据,如仍有疑问,请查看示例:samples/sample-apple/MatrixDemo
。
常见问题及源码下载:https://github.com/Tencent/matrix#matrix_ios_cn