Appium 个人分享-Hybrid App [Node.js 内存溢出问题]

中年_Brain · 2014年08月13日 · 最后由 陈子昂 回复于 2017年08月27日 · 2277 次阅读

我不知道论坛的大神在用 appium 写自己的框架的时候,有没有预见 Node.js 内存溢出问题,我遇见了。。

为了这个问题,我困惑了 1 个月,给老美发邮件沟通,他们说他们没有这个问题,我后来归结为 Hybrid App 混合框架才会有的问题。

我的 case 运行在 1~2 小时之间,发现 Node 进程内存一路飙升,至今我也没有很好的解决方案,美国人说他们改了,但是我运行下来,还是内存溢出,对 node.js 又不太熟悉,放弃修改他们源代码的想法。

但是我找到了一个零时解决方案。你们没有看错。是我找到了一条暂时解决方案。

首先找到
Appium\node_modules.bin\appium.cmd
这个文件,为什么我要找这个呢?

因为我的 appium.js 是通过代码调用的,所以我找到了代码调用的入口。

然后 node server 这个东西是一个轻量的服务器,那么一定会有参数控制它的内存 GC 机制,我很幸运找到了。

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

为什么参数要这样写呢,其实我也是一知半解,但是这几个参数是我试验出来最好的效果了。

我的机器配置是 win7 64 位,8G 内存。

欢迎其他大神,也能深入发掘一下,另外如果有人想修改 appium 的代码,请邀请我。

共收到 12 条回复 时间 点赞

大赞啊!!!!

不得了,各种总结啊~

@bxc168 你这么屌,你家人知道吗~

我只想说,OOM 的问题,不一定是 Appium 导致的,这个定位需要长期跟。

这里确实很复杂,我也找了很多网络的知识。
采用排除法
1、尽量保证所有的变量手段释放;增加 finally 步骤
2、减少全局变量,类变量的占用,改写 class 的写法
3、使用最简单的代码长时间运行,分析内存占用情况

不过我用 java 确实不太熟练,最终只能采用我上面的办法零时解决...

nodejs 0.10.30 之前使用的 v8 引擎有内存泄漏,可以升级 nodejs 尝试解决。

#6 楼 @missing 真的吗?这个问题困惑死我了

#7 楼 @bxc168 升级试试?

#8 楼 @missing 升级到 0.10.30 之后,内存占用确实少了很多,至少我的用例现在不会溢出了。。谢谢。

#9 楼 @bxc168 那太好了!问题得到解决!

楼主,我在用 appium 执行用例的时候,是会执行失败,并且打印出很多很多日志,平均 1ms 都能打出几条,在另外的电脑上就可以,不知道是不是楼主所说的 Node.js 内存溢出问题,请教下这种错误如何排查?

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册