OpenHarmony_appfreeze检测原理及分析方法流程
1、appfreeze检测能力概述 故障类型检测事件时间含义LIFECYCLE_TIMEOUTLIFECYCLE_TIMEOUTability生命周期切换超时APP_LIFECYCLE_TIMEOUTAPP_LIFECYCLE_TIMEOUT应用生命周期切换超时THREAD_BLOCK_6STHREAD_BLOCK_6S && THREAD_BLOCK_3S应用主线程卡死检测UI_
1、appfreeze检测能力概述
故障类型 | 检测事件 | 时间含义 |
---|---|---|
LIFECYCLE_TIMEOUT | LIFECYCLE_TIMEOUT | ability生命周期切换超时 |
APP_LIFECYCLE_TIMEOUT | APP_LIFECYCLE_TIMEOUT | 应用生命周期切换超时 |
THREAD_BLOCK_6S | THREAD_BLOCK_6S && THREAD_BLOCK_3S | 应用主线程卡死检测 |
UI_BLOCK_6S | UI_BLOCK_6S && UI_BLOCK_3S | 应用UI线程卡死检测 |
APPLICATION_BLOCK_INPUT | APPLICATION_BLOCK_INPUT | ANR,输入响应超时 |
SCREEN_ON_TIMEOUT | SCREEN_ON_TIMEOUT | 亮屏超时 |
2、LIFECYCLE_TIMEOUT(ability生命周期切换超时)检测原理
生命周期切换开始的时候创建一个超时事件,当整个切换流程完成之后移除这个事件,如果在一定时间内没完成移除,则上报故障。
不同生命周期对应的超时时间
ability生命周期 | Load | Active | Inactive | Terminate | Connect | Disconnect | Restart | Foreground | Background |
---|---|---|---|---|---|---|---|---|---|
超时时间 | 10s | 5s | 0.5s | 10s | 3s | 0.5s | 5s | 5s | 3s |
3、THREAD_BLOCK_6S(应用主线程卡死)检测原理
通过向主线程中注入检测任务,3秒没有执行记录thread_block_3s故障并抓取日志,如果后续3秒还没有执行上报thread_block_6s故障并抓取日志,组合3s和6s日志,上报THREAD_BLOCK_6S故障,如果后续3秒执行了,则取消故障上报。
4、UI_BLOCK_6S(应用UI线程卡死)检测原理
UI/JSThrezd线程往Watchdog进行注册,然后Watchdog定时向UI线程posttask,task在3秒没有被执行会上报ui_block_3s故障并抓取日志,如果后续3秒还没有执行上报ui_block_6s故障并抓取日志,组合3s和6s日志,上报UI_BLOCK_6S故障,如果后续3秒执行了,则取消故障上报。
5、APPLICATION_BLOCK_INPUT(输入响应超时)检测原理
FA模型和stage模型主要的区别在于UI是在主线程还是单独的UI线程。 当前图是FA模型异步UI处理。
6、appfreeze分析步骤方法
appfreeze问题定位原则:
1、应用优先定位,确认根因为其他模块,需和相应模块对齐,由其接力分析。
2、若系统存在严重内存泄漏导致系统运行缓慢,大量应用上报各种appfreeze问题的情况,需优先解决系统问题。
appfreeze问题分析步骤:
(1)、查看故障日志中Reason和msg信息,确认故障类型;不同故障类型检测原理和分析方法不一样,根据故障类型和故障描述确定大致分析方向
(2)、查看故障日志,确定故障应用进程号,故障时间,并找到故障时间附近的hilog日志,方便后续分析。
(3)、查看故障日志中故障应用主进程堆栈,大致推测当前故障应用在进行什么操作
(4)、查看故障日志中的Binder调用链,确定是否有Binder对端等待导致本应用阻塞的情况
(5)、查看故障日志中的CPU调用信息,确定故障时间附近CPU占用是否非常高,有没有系统繁忙的情况
(6)、查看故障日志中故障应用的内存占用信息,判断故障应用内存占用是否正常
(7)、通过上述步骤大概确定问题是系统原因,还是应用原因,还是其他服务的原因,确定责任田后,由其接力分析。
更多推荐
所有评论(0)