Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
2.8k views
in Technique[技术] by (71.8m points)

react-native 安卓内存溢出排查思路?

react-native 写的APP, 后台看到不少内存溢出的, 但又想不出是哪里出现问题,因为自己调试的时候也没发现内存暴涨的情况

所以想请教下有什么思路可以排查内存溢出问题呢?

错误大多如下几种:

java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack available
java.lang.OutOfMemoryError: OutOfMemoryError thrown while trying to throw OutOfMemoryError; no stack trace available
java.lang.OutOfMemoryError: Failed to allocate a *** byte allocation with 0 free bytes and *** until OOM

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

从你的描述以及抛出的OutOfMemoryError Exception来看,你这大概率是内存泄漏导致内存占用率逐渐爬升最终发生内存溢出,当然也不排除因为某些原因导致短时间内创建了非常多的实例,填满了堆空间,下一个实例创建申请空间时导致内存溢出。
OutOfMemoryError Exception 是在Java SDK 中抛出的,考虑到 RN与原生的交互方式(Bridge)以及平时RN开发中可能会安装依赖native modules 的package,建议你按以下优先级进行排查:

  1. 是否有循环创建组件实例的代码在某些情况下发生了死循环或者说一次性循环创建了非常多的组件实例;
  2. 是否有组件频繁渲染/卸载,并且其中有使用未被销毁的定时器(不一定是 setTimeout
  3. 是否有动态加载的组件并且其中加载了非常大的资源
  4. 是否有使用依赖native modules 的npm 包(在0.60RN版本之前需要 react-native link 的那种),有的话,删掉试试
  5. 是否有引用其他第三方组件库?有的话,删掉试试
  6. 检查代码中有闭包的代码,使用完后销毁闭包
  7. 都不行的话,收拾东西跑路吧~(O(∩_∩)O哈哈~)

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...