跳到主要内容

资源泄漏事件介绍

简介

资源泄漏是指句柄、线程或内存等资源在应用运行过程中未被正确释放,导致资源长期占用且无法被其他应用使用。如果某一类资源耗尽,系统可能出现卡死或重启等异常情况。

本文面向开发者介绍资源泄漏事件各字段的含义和规格。如需了解如何使用HiAppEvent接口订阅系统资源泄漏事件,请参考以下文档。目前提供ArkTs和C/C++两种接口。

资源泄漏事件支持在应用分身场景下使用 HiAppEvent 进行订阅,支持在元服务场景下使用 HiAppEvent 进行订阅,从 API version 22 开始支持在输入法应用场景下使用 HiAppEvent 进行订阅。

检测原理

检测原理详见Resource Leak(资源泄漏检测)

自定义规格设置

接口说明

接口名描述
setEventConfig(name: string, config: Record<string, ParamType>): Promise<void>设置资源泄漏日志规格参数,name应为资源泄漏事件名称常量hiappevent.event.RESOURCE_OVERLIMIT。仅支持js内存泄漏类型。 说明:从API version 20开始,支持该接口。

参数设置

开发者可以使用HiAppEvent提供的接口,在Record<string, ParamType>中设置RESOURCE_OVERLIMIT的日志和回调事件规格。具体参数说明如下:

参数名类型必填说明
js_heap_logtypestringevent:应用发生oom时,不传递堆快照。 event_rawheap:应用发生oom时,系统生成并传递堆快照 注意:当前仅接收以上二值,如果传入其他内容,方法将调用失败,不会产生任何效果。

即使参数js_heap_logtype设置为是event_rawheap,也不能保证生成堆快照文件。这是因为生成堆快照时,应用可能因性能问题触发冻屏而提前退出。

参数配置示例:

let configParams: Record<string, hiAppEvent.ParamType> = {
"js_heap_logtype": "event", // 仅获取事件
// "js_heap_logtype": "event_rawheap", // 同时获取堆快照
};

hiAppEvent.setEventConfig(hiappEvent.event.RESOURCE_OVERLIMIT, configParams);

应用调用setEventConfig接口时,每次调用的内容只会在当前应用生命周期内生效。应用重启后,需要重新通过setEventConfig接口设置。

在同一个应用生命周期内,可以多次调用setEventConfig,以最后一次成功调用的值为准。

开发者在调试以及自测试过程中,单日内触发OOM次数过多,可能会遇到无法收到hiappevent回传js内存泄漏事件的情况,可以通过将系统时间往后调一天进行规避。

params字段说明

资源泄漏事件信息中params属性的详细说明如下:

名称类型说明
timenumber事件触发时间,单位:ms。
bundle_versionstring应用版本。
bundle_namestring应用名称。
pidnumber应用的进程ID。
uidnumber应用的用户ID。
resource_typestring资源类型,取值范围详见resource_type属性。
memoryobject(resource_type为pss_memory或js_heap专有)内存信息,详见memory属性。
fdobject(resource_type为fd专有)文件描述符信息,详见fd属性。
threadobject(resource_type为thread专有)线程信息,详见thread属性。
external_logstring[]故障日志文件路径。为避免目录空间超限(限制参考log_over_limit),导致新生成的日志文件写入失败,请在日志文件处理完后及时删除。
log_over_limitboolean生成的故障日志文件与已存在的日志文件总大小是否超过2GB上限。true表示超过上限,日志写入失败;false表示未超过上限。

resource_type字段说明

取值说明
pss_memorypss内存泄漏。
ion_memoryion内存泄漏。 说明:从API version 20开始,支持该字段。
gpu_memorygpu内存泄漏。 说明:从API version 20开始,支持该字段。
js_heapjs内存泄漏。
fd句柄泄漏。
thread线程泄漏。

memory字段说明

名称类型说明
rssnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)进程实际占用内存大小,单位:KB。
vssnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)进程向系统申请的虚拟内存大小,单位:KB。
pssnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)进程实际使用的物理内存大小,单位:KB。
ionnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)进程实际使用的ION内存大小,单位:KB。 说明:从API version 20开始,支持该字段。
gpunumber(resource_type为pss_memory、ion_memory、gpu_memory专有)进程实际使用的GPU内存大小,单位:KB。 说明:从API version 20开始,支持该字段。
sys_free_memnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)空闲内存大小,单位:KB。
sys_avail_memnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)可用内存大小,单位:KB。
sys_total_memnumber(resource_type为pss_memory、ion_memory、gpu_memory专有)总内存大小,单位:KB。
limit_sizenumber(resource_type为js_heap专有)基线大小,单位:KB。
live_object_sizenumber(resource_type为js_heap专有)实际使用内存大小,单位:KB。

fd字段说明

名称类型说明
numnumberfd总数量。
top_fd_typestring使用最多的fd类型。
top_fd_numnumber使用最多的fd类型的数量。

thread字段说明

名称类型说明
numnumberthread总数量。

自定义params参数

当前资源泄漏事件上报js内存泄漏事件信息,可能无法满足开发者的个性化需求,因此提供事件setEventParam方法,自定义事件上报信息。

接口说明

接口名描述
setEventParam(params: Record<string, ParamType>, domain: string, name?: string): Promise<void>事件自定义参数设置方法。 说明:从API version 20开始,支持该接口。