我们正在使用PhantomJS在TFS构建服务器上运行QUnit测试页面。我们的测试运行器版本是基于以下示例构建的:
https://github.com/ariya/phantomjs/blob/master/examples/run-qunit.js
随着时间的推移,测试数量从几百个增加到了数千个,在一个晴朗的日子里,phantomjs开始崩溃。它会直接死机并提示上传转储文件,但当你查看转储文件时,文件大小为0kb!当我们在进程资源管理器中仔细查看时,我们发现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以释放每个模块的内存,并且永远不会保留死堆对象的构建。不关闭此问题,因为它只是一个解决方法而不是解决方案。希望创作者能够在未来修复这个问题。