javascript – 多个PhantomJS实例挂起

在Ubuntu 14上运行PhantomJS的多个实例时,我遇到问题.几分钟之后,这些进程将无响应.

简要背景:
使用PhantomJS 2.0来呈现最终使用Wkhtmtopdf作为PDF保存的网页.
PhantomJS只负责加载页面,进行ajax请求,并在PDF保存在服务器上之后等待响应.它不会生成PDF本身.
有数百个网页需要生成PDF,所以我想像系统允许的那样并行运行多个PhantomJS实例.

每个PhantomJS进程都是由shell脚本启动的,如下所示:
{path to phantomjs} {path to js file} –data {some argument}>> {log to log file} 2>& 1&

问题出现在几分钟之后,我停止从PhantomJS进程得到任何输出,并且看着顶部我可以看到他们只是躺在那里没有做任何事情. JS脚本具有定时器,如果时间超过一分钟,则重试加载页面,如果页面无法加载/ PDF生成失败,则最终调用phantom.exit().所以即使出了问题,这个过程也应该退出 – 但是它不会.

我尝试更改并行运行的PhantomJS实例的数量.试过20 – > 10 – > 5 – > 3,但似乎并不重要.一次维护20个实例时,我实际上可以获得更多的作业成功执行.

当使用–debug = true运行时,我可以看到在某些时候它被卡住了
[DEBUG] WebPage – updateLoadingProgress:
另外通过输出我看到几个这样的警告:
[警告] qiodevice :: write:设备未打开
这使我相信这是问题的根源.

我以为可能有一些文件资源的争用,所以我试图没有将输出重定向到日志文件,而不是使用–local-storage-path,但没有帮助.

作为一个附注,我已经使用PhantomJS几年了,现在做同样的过程,只是顺序(一次运行一个PhantomJS过程).虽然有几个障碍要克服,它的工作很棒.

任何想法是什么导致这个?
任何人面临类似的问题?
有关并行运行多个PhantomJS实例的建议?

谢谢!

解决方法

我在本地和我的CI服务器(也是Ubuntu)上面临着完全相同的问题.卸载2.0.0并升级到2.1.1解决了我的问题.

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...