内存泄露
内存泄漏是指程序在申请内存后,未能在使用完毕后正确释放,导致内存不能被再次使用的一种现象。在鸿蒙系统中,内存泄漏可以通过不同的检测机制来发现和处理,以确保系统的稳定性和性能。
鸿蒙系统中的内存泄漏检测机制主要包括以下几个方面:
-
JavaScript内存泄漏(JS_LEAK) :当JavaScript运行时的heap使用量超过85%或者遇到内存耗尽(OOM)时,系统会捕捉heapdump信息,并同步上报故障 。
-
Native内存泄漏(PSS_MEMORY) :系统会监控应用进程的动态内存使用情况,当动态内存峰值超过平均基线值的两倍时,会判定为内存泄漏,并触发相应的管控措施 。
-
Ashmem/Ion/GPU内存泄漏(KERNEL_MEMORY) :当这些类型的内存使用超过预设基线时,系统会捕捉相关的维护测试信息,并判定为泄漏 。
思考:
- 做什么动作可能会导致内存较快分配?
- 抓取 Hiprofile:明确 PID,哪个进程涨用哪个 PID
- 分析 trace,定位代码:可以结合 unstriplib,unstripexe
- 确定修改方案,验证:需要自己写反复验证
内存泄漏的分析方法
-
ASan检测
ASan(Address-Sanitizer)是内存检测的工具,