老化过程中camx hal进程swap内存持续增长到4.5G,低内存500M下,导致相机等各种app ANR爆了。

发布于:2025-04-03 ⋅ 阅读:(15) ⋅ 点赞:(0)

之前一个项目出现老化过程中,出现相机等各种app ANR爆了。分析发现camx hal进程swap内存持续增长到4.5G。问题分析思路如下:

  1. 首先需确认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,这里也是出现超标情况。

  1. 这时需要理解swap内存的定义是什么?是否真的内存泄漏了?swap内存的来源是什么?

swap主要是在内存不够用的时候,将部分内存上的数据交换到swap空间上,以便让系统不会因为内存不够用而导致oom或者更致命的情况出现。当内存使用存在压力的时候,开始触发内存回收行为,就可能会使用swap空间。Swap 把这些不常访问的内存先写到磁盘中,然后释放这些内存,给其他更需要的进程使用。再次访问这些内存时,重新从磁盘读入内存就可以了

swap内存主要是压缩不活跃的内存,如果内存泄漏了,swap的来源肯定也是持续增长趋势。通常情况下,swap不会去压缩ION内存,更多是压缩malloc分配的ANON等匿名页,也就是进程通过malloc/mmap使用的内存部分。于是我们需要细化观察进程各个内存变化过程。

  1. 低内存下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
  1. 然后我们写个脚本导出所有老化过程中这个进程的内存细化情况,如下:
    梳理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"

网站公告

今日签到

点亮在社区的每一天
去签到