1、appfreeze检测能力概述

故障类型检测事件时间含义
LIFECYCLE_TIMEOUTLIFECYCLE_TIMEOUTability生命周期切换超时
APP_LIFECYCLE_TIMEOUTAPP_LIFECYCLE_TIMEOUT应用生命周期切换超时
THREAD_BLOCK_6STHREAD_BLOCK_6S && THREAD_BLOCK_3S应用主线程卡死检测
UI_BLOCK_6SUI_BLOCK_6S && UI_BLOCK_3S应用UI线程卡死检测
APPLICATION_BLOCK_INPUTAPPLICATION_BLOCK_INPUTANR,输入响应超时
SCREEN_ON_TIMEOUTSCREEN_ON_TIMEOUT亮屏超时

 

 

 

 

 

 

 

 

2、LIFECYCLE_TIMEOUT(ability生命周期切换超时)检测原理

生命周期切换开始的时候创建一个超时事件,当整个切换流程完成之后移除这个事件,如果在一定时间内没完成移除,则上报故障。

 不同生命周期对应的超时时间 

ability生命周期LoadActiveInactiveTerminateConnectDisconnectRestartForegroundBackground
超时时间10s5s0.5s10s3s0.5s5s5s3s

 

 

 

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)、通过上述步骤大概确定问题是系统原因,还是应用原因,还是其他服务的原因,确定责任田后,由其接力分析。

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐