最近看到了一份关于 微信自研 APM 利器,Matrix 正式开源了
具体上报方案:
1、FPS,每秒传输帧数 参数 FPS 大概在50到60之间,低于此数值,在连续的一段时间内超过阀值的帧数上报,防止数据量过多。
2、CPU占用率,( > 50% 上报)
1)、在控制器加载成功的时候获取CPU使用率( viewDidAppear )获取一次。
2)、程序运行每隔5s获取一次
3、内存占用,(设置内存使用的阀值,iphoneX大概在100M+)
1)、在控制器加载成功的时候获取内存使用率(viewDidAppear)获取一次。
2)、程序运行每隔5s获取一次
4、卡顿,
1)、创建一个子线程进行循环检测,每次检测时设置标记位为YES,然后派发任务到主线程中将标记位设置为NO,设置超时阀值为0.05。接着子线程沉睡超时阙值时长,判断标志位是否成功设置成NO,如果没有说明主线程发生了卡顿。
5、页面加载时间、(设置加载时间阀值0.3s左右)
1)、从控制器加载成功的过程中(viewDidLoad -> viewDidAppear)获取一次
// 上报数据存储在本地缓存每隔1分钟将数据 (写内存) 整体一次性上报,每条记录以数组的形式存储
// 上报数据结构
"data":{
"eventType":1, // 时间类型 1、FPS 2、CPU占用率 3、内存占用 4、卡顿,5、页面加载时间
"eventData":0.00, // 上报的阀值 (FPS为平均阀值)
"eventDuration":0.00 // 持续时间 FPS,其他为0
"stackData":"单前堆栈信息", // 单前堆栈信息
},
// 数据剥离到业务层处理 上报一次的数据
“data”:{
"appType":2, // 1、货主 2、司机
"appName":"YMM_Driver", // YMM_Driver,YMM_Shipper
"devModel":"vivo V3Max A", // 设备Model
"devType": "vivo", // iPhoneX , ...
"platVersion":"5.1.1", // 平台版本
"Platform":"android" // android, ios
"userId":"96315273729543070", // 用户id
//"timeStamp":"January 14th 2019, 20:15:46.167", // 时间戳
},
目前有两个问题
1、数据有没有必要写文件?
2、具体的上报阀值,以什么样的标准来设定。
以上两个问题根据个人项目的具体实际情况而定
附赠Demo 在本人的资源文件页面下载