之前一个项目出现老化过程中,出现相机等各种app ANR爆了。分析发现camx hal进程swap内存持续增长到4.5G。问题分析思路如下:
- 首先需确认camx hal进程内存占用是否正常?是否泄漏?
结果下载老化几天的日志,dump出camx hal进程内存不同时间段的情况,如下:
单台机器的详细日志:
相机进程内存增长情况:
1739266999645@1739326404235@2025_02_12_10_28_48@SystemLog.zip 198,013K: vendor.qti.camera.provider@2.7-service_64 (pid 1634) ( 145,308K in swap)
1739327328830@1739341135895@2025_02_12_14_41_18@SystemLog.zip 894,815K: vendor.qti.camera.provider@2.7-service_64 (pid 1634) ( 841,472K in swap)
1739341385357@1739357045550@2025_02_12_18_45_45@SystemLog.zip 1,501,088K: vendor.qti.camera.provider@2.7-service_64 (pid 1634) (1,447,940K in swap)
1739368747545@1739369513656@2025_02_12_22_13_35@SystemLog.zip 2,253,697K: vendor.qti.camera.provider@2.7-service_64 (pid 1634) (2,200,436K in swap)
1739391291701@1739392395773@2025_02_13_04_34_54@SystemLog.zip 3,112,163K: vendor.qti.camera.provider@2.7-service_64 (pid 1634) (3,059,024K in swap)
1739472003612@1739472703954@2025_02_14_02_52_53@SystemLog.zip 4,597,384K: vendor.qti.camera.provider@2.7-service_64 (pid 1634) (4,544,364K in swap)
发现相机进程处于持续增长情况。另外8G手机的相机各场景下内存占用最大标准红线为3.8G,这里也是出现超标情况。
- 这时需要理解swap内存的定义是什么?是否真的内存泄漏了?swap内存的来源是什么?
swap主要是在内存不够用的时候,将部分内存上的数据交换到swap空间上,以便让系统不会因为内存不够用而导致oom或者更致命的情况出现。当内存使用存在压力的时候,开始触发内存回收行为,就可能会使用swap空间。Swap 把这些不常访问的内存先写到磁盘中,然后释放这些内存,给其他更需要的进程使用。再次访问这些内存时,重新从磁盘读入内存就可以了
swap内存主要是压缩不活跃的内存,如果内存泄漏了,swap的来源肯定也是持续增长趋势。通常情况下,swap不会去压缩ION内存,更多是压缩malloc分配的ANON等匿名页,也就是进程通过malloc/mmap使用的内存部分。于是我们需要细化观察进程各个内存变化过程。
- 低内存下kernel dump进程内存分布通常如下:(内存理论知识,后续补充发布)
======= dump_procs
comm 32 uid s f pid ppid oom vss anon file shmem swap
vendor.qti.came 0 1047 S 1634 1 -1000 2276752 56001 27834 181 463869
======= dump_procs_dmabuf_info
comm pid size
vendor.qti.came 1634 249424
- 然后我们写个脚本导出所有老化过程中这个进程的内存细化情况,如下:
梳理swap的过程数据,发现swap后期恶化了,过程数据可以说明和相机无关。压测14小时相机swap稳定在150~200M左右,没有增长。大概02-12 08点之后长时间(几个小时)低内存状态,但这个低内存不是相机导致的。swap恶化时间段,相机是没运行的,很可能是长时间低内存导致不断恶化。
android_log_20250211_181654.txt:02-11 18:17:58.134540 2419 2704 I CameraServiceExtImpl.cpp: 969 onTransact() onTransact, str: {"HAL_Memory":{"pid":"1634","pss":"107716","swapPss":"140076","total"