目录

内存泄漏-ashmem(KERNEL_MEMORY)问题排查

问题现象

应用在使用过程中出现闪退,hilog日志中PROCESS_KILL的Reason为ResourceLeak:Ashmem Leak,memory_leak中生成memleak-kernel-[process_name]-0-sample和memleak-kernel-[process_name]-0-[timestamp]的内存泄漏日志文件。

背景知识

问题定位

应用进程触发ashmem泄漏的管控后,系统会抓取泄漏相关的信息,在memory_leak目录生成两个故障日志文件以供分析。

步骤一:分析采样日志memleak-native-[process_name]-[pid]-sample.txt。

排查ashmem内存增长情况,是否超过了hardThreshold,或是超过softThreshold长时间未下降。

日志如下:

memoryName:ashmem
softThreshold:2048(MB)	<- 进程软门限
hardThreshold:4096(MB)	<- 进程硬门限
topMemory:3387703(KB)	<- ashmem内存峰值


              time(s)       kernelMemory(KB)         realtime
0               219             310903          2026/01/06 18:24:21
1               439             1321613         2026/01/06 18:28:01
2               659             1307039         2026/01/06 18:31:41
3               879             1377038         2026/01/06 18:35:21
4               1099            1374640         2026/01/06 18:39:01
5               1319            1369825         2026/01/06 18:42:41
6               1539            1363453         2026/01/06 18:46:21
7               1759            1364565         2026/01/06 18:50:01
8               1979            1299033         2026/01/06 18:53:41
9               2199            1299033         2026/01/06 18:57:21
10              2419            1930830         2026/01/06 19:01:01
11              2639            2017218         2026/01/06 19:04:41
12              2859            1875315         2026/01/06 19:08:29
13              3079            3322171         2026/01/06 19:12:09
14              3299            3387703         2026/01/06 19:15:49
15              3519            3387703         2026/01/06 19:19:29
16              3739            3387703         2026/01/06 19:23:09
17              3959            3367434         2026/01/06 20:06:46
18              4179            3325124         2026/01/06 20:45:02
19              4399            3338757         2026/01/06 20:48:42
20              4619            3340933         2026/01/06 21:00:05

步骤二:分析维测日志memleak-native-[process_name]-[pid]-0-[timestamp]。

日志规格如下:

Generated by HiviewDFX @OpenHarmony
LOGGER_MEMCHECK_GERNAL_INFO
memoryName:ashmem
softThreshold:2048(MB)
hardThreshold:4096(MB)
appHardThreshold:5460(MB)
topMemory:3387703(KB)


*****************************
LOGGER_MEMCHECK_MEMINFO		<- 整机内存统计信息
MemTotal:       15815588 kB
IonTotalUsed:     559284 kB
GpuTotalUsed:      48576 kB
AshmemUsed:      3340933 kB
************ endl ************


*****************************
LOGGER_MEMCHECK_PROC_INFO	<- ashmem/ion/gpu对应泄漏内存节点信息打印(泄漏类型不同,落盘的内存信息不同)
ASHMEM_PROCESS_INFO
realtime:	2026/01/06 21:00:05
Process ashmem overview info:	<- 所有进程ashmem概览信息
---------------------------------------------------------------------------------
Process_name Virtual_size Physical_size
Total ashmem  of [render_service] virtual size is  2568215348, physical size is 1387921408 
Total ashmem  of [com.hx.example] virtual size is  3099027904, physical size is 1609773056 
// ...
Process ashmem detail info:		<- 进程ashmem详细信息
---------------------------------------------------------------------------------
Process_name  Process_ID  Fd   Cnode_idx Applicant_Pid	Ashmem_name                Virtual_size  Physical_size magic
com.hx.example	19062	  252	328421	  19062	        dev/ashmem/shared_memory/E...	4096	  0	       12188
com.hx.example	19062	  291	328421	  1388	        dev/ashmem/gralloc_shared_attr	4096	  4096	       12161
com.hx.example	19062	  271	328421	  19062	        dev/ashmem/Create PixelMap	11059200  11059200     31305
com.hx.example	19062	  317	328421	  19062	        dev/ashmem/Create PixelMap	3686400	  0	       12830
// ...
---------------------------------------------------------------------------------


************ endl ************

步骤三:结合业务代码分析泄漏点。

排查方向:

分析结论

应用存在ashmem泄漏,使用了PixelMap对象未释放。

修改建议

程序需要正确管理分配的资源,使用完毕后需立刻释放。常见泄漏问题修复方法可见资源泄漏类问题优化建议和资源泄漏类问题案例。