HarmonyOS Native内存暴涨
解决方案
目前资源调度子系统对前台应用的内存没有限制,只管控进程后台的内存使用异常情况。
资源调度子系统不处理ArkTS占用的内存,Native进程内存占用没有做限制,但是占用过大会有被内核的OOM查杀的风险。
参考链接:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/background-task-overview-V5
HarmonyOS 出现appCrash <a name="section96972295339"></a>
问题描述
pc 00000000005caa9c /system/lib64/platformsdk/libark_jsruntime.so(95b2781bd3970de0ded17d64930b4bc8)
#11 pc 00000000005c75f8 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapEntryMap::InsertEntry(panda::ecmascript::Node*)+48)(95b2781bd3970de0ded17d64930b4bc8)
#12 pc 00000000005c82b0 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapSnapshot::HandleBaseClassNode(unsigned long, bool, unsigned int&, panda::ecmascript::TaggedObject*, unsigned long&)+196)(95b2781bd3970de0ded17d64930b4bc8)
#13 pc 00000000005c572c /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapSnapshot::GenerateNode(panda::ecmascript::JSTaggedValue, unsigned long, bool, bool)+864)(95b2781bd3970de0ded17d64930b4bc8)
#14 pc 000000000048c258 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::SparseSpace::IterateOverObjects(std::__h::function<void (panda::ecmascript::TaggedObject*)> const&) const::$_4::operator()(panda::ecmascript::Region*) const+204)(95b2781bd3970de0ded17d64930b4bc8)
#15 pc 0000000000489a7c /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::SparseSpace::IterateOverObjects(std::__h::function<void (panda::ecmascript::TaggedObject*)> const&) const+96)(95b2781bd3970de0ded17d64930b4bc8)
#16 pc 00000000005c41ac /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapSnapshot::FillNodes(bool, bool)+260)(95b2781bd3970de0ded17d64930b4bc8)
#17 pc 00000000005c4080 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapSnapshot::BuildUp(bool)+28)(95b2781bd3970de0ded17d64930b4bc8)
#18 pc 00000000005bf4c4 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapProfiler::MakeHeapSnapshot(panda::ecmascript::HeapProfiler::SampleType, bool, bool, bool, bool, bool, bool)+300)(95b2781bd3970de0ded17d64930b4bc8)
#19 pc 00000000005bf294 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapProfiler::DoDump(panda::ecmascript::DumpFormat, panda::ecmascript::Stream*, panda::ecmascript::Progress*, bool, bool, bool, bool, bool)+300)(95b2781bd3970de0ded17d64930b4bc8)
#20 pc 00000000005c00a4 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapProfiler::DumpHeapSnapshot(panda::ecmascript::DumpFormat, panda::ecmascript::Stream*, panda::ecmascript::Progress*, bool, bool, bool, bool, bool, bool, bool)+1080)(95b2781bd3970de0ded17d64930b4bc8)
#21 pc 00000000005bf0cc /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::HeapProfiler::DumpHeapSnapshot(panda::ecmascript::DumpFormat, bool, bool, bool, bool, bool, bool)+172)(95b2781bd3970de0ded17d64930b4bc8)
#22 pc 00000000004436e0 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::SharedHeap::DumpHeapSnapshotBeforeOOM(bool, panda::ecmascript::JSThread*)+804)(95b2781bd3970de0ded17d64930b4bc8)
#23 pc 00000000002f506c /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::SharedHeap::AllocateHugeObject(panda::ecmascript::JSThread*, unsigned long)+316)(95b2781bd3970de0ded17d64930b4bc8)
#24 pc 00000000002eaffc /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::EcmaString::CreateLineStringWithSpaceType(panda::ecmascript::EcmaVM const*, unsigned long, bool, panda::ecmascript::MemSpaceType)+700)(95b2781bd3970de0ded17d64930b4bc8)
#25 pc 00000000002f7da8 /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::EcmaString::CreateFromUtf8(panda::ecmascript::EcmaVM const*, unsigned char const*, unsigned int, bool, panda::ecmascript::MemSpaceType, bool, unsigned int)+548)(95b2781bd3970de0ded17d64930b4bc8)
#26 pc 000000000050fefc /system/lib64/platformsdk/libark_jsruntime.so(panda::ecmascript::ObjectFactory::NewFrom
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
string在ArkTs<==>Native间传递时,会发生内存copy吗?
1088浏览 • 1回复 待解决
native层创建的pixelmap,arraybuffer等内存数据,传给ts层使用,最后是ts层的系统自动释放回收内存吗?
618浏览 • 1回复 待解决
通过PixelMap_CreatePixelMap创建的对象,内存在ArkTS侧和Native侧是否共享
2444浏览 • 1回复 待解决
HarmonyOS 如何获取内存快照,分析内存泄漏问题?
294浏览 • 1回复 待解决
HarmonyOS 关于内存管理
228浏览 • 0回复 待解决
如何利用HarmonyOS NEXT的内存管理机制来减少内存泄漏和提高内存使用效率?
834浏览 • 0回复 待解决
ArkTS的对象数据与Native的对象数据如何绑定,相互持有对象数据时内存如何管理
2271浏览 • 1回复 待解决
HarmonyOS 内存泄漏检测
316浏览 • 1回复 待解决
HarmonyOS webview内存占用问题
199浏览 • 1回复 待解决
HarmonyOS napi共享内存指导
204浏览 • 1回复 待解决
HarmonyOS 怎么检查内存泄漏
719浏览 • 1回复 待解决
HarmonyOS onMemoryLevel监听内存变化
63浏览 • 1回复 待解决
HarmonyOS 应用内存资源占用过大时,系统是否会自动释放内存?
633浏览 • 1回复 待解决
HarmonyOS native调试
317浏览 • 1回复 待解决
HarmonyOS 介绍内存管理的文档
298浏览 • 1回复 待解决
HarmonyOS 实时查看App所占内存
141浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何通过内存回收机制减少内存消耗?
269浏览 • 1回复 待解决
HarmonyOS 运行报错,内存不足
767浏览 • 1回复 待解决
HarmonyOS 应用进程的内存分配
344浏览 • 1回复 待解决
HarmonyOS dump本地内存的api
216浏览 • 1回复 待解决
HarmonyOS 获取设备内存的接口
171浏览 • 1回复 待解决
HarmonyOS native内存耗尽导致的系统强杀,第二次启动的时候通过HiAppEvent事件订阅未获取到数据
231浏览 • 1回复 待解决
HarmonyOS native断点
124浏览 • 1回复 待解决
如何获取内存coredump
1174浏览 • 1回复 待解决
从#22号栈分析到应用OOM了,见下:
OOM排查方法如下:
1、排查JS侧的代码,是否存在大量的ArkTS代码的变量没有释放情况,比如将new的对象、内存放到Map中管理而不释放等,参考ArkTS内存泄露分析:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-arkts-memory-leak-analysis-0000001883411885-V5
2、从日志中看到,应用存在的C++库有libisecnet.so、libmobiletoken.so、libohosdrisklib.so、libminizip_ng.so等等,需要排查malloc/new申请的内存,是否存在对应的free/delete释放。
3、排查使用napi_create_arraybuffer、napi_get_arraybuffer_info等napi接口,存在参数是双指针传递的参数,无需申请与释放内存,接口使用举例如下:
4、经过第2、3步的排查,可以将一些明显的内存泄露问题解决降低工具排查压力,工具排查请参考基础内存分析Allocation分析:
https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-insight-session-allocations-0000001481625938-V5
也可以直接用第一步的工具排查。