RN内存问题 内存持续增长,直到被系统杀死



  • RN内存问题 内存持续增长,直到背系统杀死。

    在iOS iPad上开发,系统内存2G,应用内存大概到1.3G左右就被系统杀了。

    在一级页面push进入二级页面大概会申请150M内存,pop回去时仅释放了70M左右,(如果等个3分钟或者更长,可能会又一次释放,大概能再释放70M左右,时间不确定,用户操作也不能让等呀),就这样每次进入二级界面都会有很多内存未释放,App占用内存直线上升,次数多了,内存达到系统限制,就会被系统杀死。

    在iOS iPad上开发,系统内存2G,应用内存大概到1.35G左右就被系统杀了。

    这是Xcode内存监控:

    每次上升是进入二级页面,下降是退出二级页面,尝试了很多次
    0_1526542993780_8ddfa426-e48b-4f5d-8931-9957ba8f864e-image.png

    使用Instruments内存泄漏监控:

    每次上升是进入二级页面,下降是退出二级页面,试了两次
    0_1526543297620_d6e2b16a-046d-4d38-b24e-fc16e8f9fd4e-image.png

    排除的问题:

    1. 那个二级界面中使用的原生模块内存都在二级界面退出时释放了
    2. RN JS 这边组件的willUnmount基本都做了处理

    猜测:从Instruments的监控看到,活跃内存不多,肯定是没有释放

    1. 我代码中循环引用导致无法释放(基本排除)
    2. RN内存释放不及时,(或者有我不了解的释放策略?)

    有 遇到/处理 过 相同/类似 问题的大佬没?救命!!!



  • 更新:

    1. 刚开始一直着手于自己JS代码及原生导出模块的梳理优化,主要是循环引用排查以及原生模块的内存释放问题。没想到是react-navigation的问题(这里暂时归结为react-navigation的问题),实在没有办法了才去更新依赖库的。大概耽搁了4天。
    2. 更细一遍reactreact-nativereact-navigation后,原先每次进出二级页面大概遗留内存10M以内,基本可用了,还在继续优化。
    3. 更新期间碰到问题。只更新react-navigation导致项目跑不起来。当时一直没想到更新reactreact-native。因为从react-native@0.50react-native@0.55,版本差距比较大,没想到是这边的问题,后来实在没办法查看react-navigationpackage.json才发现问题。大概耽搁了1天。

    现在的内存占用:
    0_1526885872973_ee4358b8-da55-495a-8c1b-01035d8f2aba-image.png

    给同样碰到问题的少年们,实在没有办法时,适当怀疑官方依赖库。