跳到主要内容

功耗检测

简介

功耗检测主要提供CPU高负载检测,可以通过订阅相关事件实现检测。

如需了解如何使用HiAppEvent提供订阅CPU高负载事件,请参考以下文档。目前仅提供ArkTS接口。

实现原理

系统会周期性及在特定条件(如前后台切换)下,采集三方应用在CPU上的运行时间,并每5分钟统计一次前5分钟的平均负载。若负载超过设定门限,将触发HiAppEvent预警事件。

应用触发CPU高负载事件,其中负载是根据CPU核数归一化后的运行时间。例如:在5分钟内,应用进程在10核CPU上运行了5分钟,其平均负载为:5(CPU上运行时间) / 5(统计周期分钟)/ 10(核数) = 10%。

CPU高负载事件存在以下场景:

  1. 应用在前台时触发CPU高负载事件:5分钟内平均负载大于30%。
  2. 应用在后台时触发CPU高负载事件:5分钟内平均负载大于10%。
  3. 应用线程高负载异常事件:单线程1分钟内平均负载大于70%。

约束和限制

前台CPU高负载异常:单应用默认一天只抓取1次调用栈,1次采样栈。

后台CPU高负载异常:单应用默认一天只抓取1次调用栈,1次采样栈。

线程CPU高负载异常:单应用默认一天只抓取1次采样栈。

相关配置可自定义,详见自定义参数

日志规格

在订阅事件开发步骤的最后一步中,获取到系统事件数据的处理日志后(详细流程见:订阅CPU高负载事件(ArkTS)),可通过查找日志中“external_log”记录的故障日志文件路径,得到故障日志。例如:

HiAppEvent eventInfo={"domain":"OS","name":"CPU_USAGE_HIGH","eventType":1,"params":{"begin_time":1765959898079,"bundle_name":"com.xpower.test","bundle_version":"1.0.0","end_time":1765959958079,"external_log":["/data/storage/el2/log/hiappevent/CPU_USAGE_HIGH_1765959959260_0.log"],"fault_type":3,"foreground":true,"log_over_limit":false,"threads":[{"name":"WorkerThread","tid":29164,"usage":72}],"time":1765959959257,"usage":72}}

external_log下记录故障日志的路径,在路径下可获取到故障日志。

调用栈故障日志格式详见:一般故障场景日志规格中的“调用栈帧内容说明”。

采样栈故障日志格式详见:日志规格中的“采样栈规格”。