【发布时间】:2014-08-17 15:45:54
【问题描述】:
我们正在使用 phantomjs 在我们的 TFS 构建服务器上运行我们的 qunit 测试页面。我们的测试运行器版本是根据下面的示例构建的
https://github.com/ariya/phantomjs/blob/master/examples/run-qunit.js
在一段时间内,测试的数量从数百增加到数千,并且在好日子 phantomjs 开始崩溃。它真的死了说上传转储,当你看到转储时它是 0kb !!
当我们在进程资源管理器上仔细查看它时,我们发现 phantomjs 的内存消耗不断增加,因为 phantomjs 正在运行测试并最终在 833MB 处崩溃。
是的,chrome 和 IE 使用了相同数量的内存!是的,是的,我们的测试正在泄漏内存:(。我们确实修复了它,在 chrome 和 IE 上的内存利用率降低了 50%,我们希望 phantomjs 现在可以处理它。但是不,phantomjs 仍然不断崩溃,进程资源管理器显示相同的内存消费。
http://phantomjs.org/api/webpage/method/close.html
根据上述文档,phantomjs 会在关闭时释放堆分配?这可能是我们的固定测试在 chrome 上消耗更少内存而不是 phantomjs 的原因吗?最后如何解决这个问题?如何让 phantomjs 保持垃圾收集 javascript 对象以减少堆分配?
更新 1 - 07/28
我们解决了问题。我确实修改了我的脚本以逐个模块地执行我的测试模块。在为模块执行所有测试后循环中,我调用 page.close 以便它释放每个模块的内存,并且永远不会继续构建对象的死堆。没有关闭这个问题,因为它是一种解决方法而不是解决方案。希望创作者能在某个时候解决这个问题。
【问题讨论】:
-
你在你的网页上加载了什么样的数据结构来消耗833MB?太疯狂了!我从未听说过 Web 应用程序会占用这么多内存。
-
@CameronTinker 当应用程序独立运行时,它不会超过 90MB,并且会在其生命周期内保持不变。它是一个使用 EmberJS 构建的单页应用程序。消耗 833MB 是 qunit test runner page ..
标签: javascript memory-leaks tfs phantomjs