Android appium 内存溢出的解决方法

这里写图片描述

第一种:

Android appium服务器执行自动化脚本一个多小时总是报FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory内存溢出

通过调整\Appium\node_modules.bin\appium.cmd中的–max-old-space-size内存限制大小参数值
调整之前:

@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\appium\bin\appium.js" %*
) ELSE (
  node  "%~dp0\..\appium\bin\appium.js" %*
)

调整之后:


@IF EXIST "%~dp0\node.exe" (
  "%~dp0\node.exe"  "%~dp0\..\appium\bin\appium.js" %*
) ELSE (
  node --max-old-space-size=2047 --gc-global  "%~dp0\..\appium\bin\appium.js" %*
)

【敲黑板知识点】:–max-old-space-size参数值设置超过2047,如2048启动appium服务器也会报FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - process out of memory
查看了相关资料,原来是Node V8做了内存限制,限制了JavaScript所能使用的内存(64位为1.9GB,32位为1GB),暂时还不明白它为啥要做此限制。

第二种:

基于appium源码 1.6.3 运行,发现运行一段时间后,会出现内存溢出.
用node-heapdump生成heap快照 发现多了很多字符串对象:内容如下
02-22 14:50:57.128 23384 23402 I AccessibilityInteractionClient: Node cache hit
然后google,发现,这段是由android AccessibilityInteractionClient.java中输出的,
最后怀疑到是appium取android日志,没有释放,所以内存一直在增涨
通过查找,在appium-adb的logcat.js这个文件,有开启接收logcat日志,并到this.logs[]中,
但是没有地方,将这个日志取出来,释放,所以就内存一直在上涨,最后out of memory.
如下图:

这里写图片描述

这样只要针对下药,将push log的地方,注释后,就正常了

第二种方法,才是从根本上解决了此问题;

两种解决方法都来自于网上,感谢原作者的分享;

猜你喜欢

转载自blog.csdn.net/qq_15283475/article/details/80404063