自动化卡顿检测方案及优化

321 阅读1分钟

为什么需要自动化检测方案

系统工具适合线下针对性分析

线上及测试环节需要自动化检测方案

自动化卡顿检测方案原理

消息处理机制,一个线程只有一个Looper

mLogging对象在每个message处理前后被调用

主线程发生卡顿,是在dispatchMessage执行耗时操作

具体实现

Looper.getMainLooper().setMessageLogging()

匹配>>>>>Dispatching,阈值时间后执行任务(获取堆栈)

匹配<<<<<Finished,任务启动之前取消掉

AndroidPerformanceMonitor实战

非侵入式的性能监控组件,通知形式弹出卡顿信息

github.com/markzhai/An…

问题及优化

自动检测方案问题

确实卡顿了,但卡顿堆栈可能不准确

和OOM一样,最后的堆栈只是表象,不是真正问题

139483852.png 可能在T2的时候造成卡顿的函数已经执行完毕,这时候获取到的堆栈信息就没有包含造成真正卡顿的函数

自动检测方案优化

获取监控周期内的多个堆栈,而不仅是最后一个

139551827.png

海量卡顿堆栈处理

高频卡顿上报量太大,服务端有压力

分析:一个卡顿下有多个堆栈大概率有重复

解决:对一个卡顿下堆栈进行hash排重,找出重复的堆栈

效果:极大的减少展示量同时更高效找到卡顿堆栈