use*_*061 11 javascript scalability hang contention 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} >> {path to log file} 2>&1 &
问题发生在几分钟之后,我停止从PhantomJS进程获得任何输出,并且看着top我可以看到他们只是躺在那里没有做任何事情.JS脚本具有在超过一分钟时重试加载页面的计时器,并且phantom.exit()如果页面无法加载/ PDF生成失败,则最终调用.因此,即使出现问题,该过程仍应退出 - 但事实并非如此.
我尝试更改并行运行的PhantomJS实例的数量.试过20 - > 10 - > 5 - > 3,但似乎并不重要.实际上,当一次维护20个实例时,我可以成功执行更多作业.
在运行时,--debug=true我可以看到它在某些时候被卡住了.
[DEBUG] WebPage - updateLoadingProgress:
同时通过输出我看到了几个警告:
[WARNING] QIODevice::write: device not open
这让我相信这是问题的根源.
我以为可能会有一些争用文件资源,所以我试过没有将输出重定向到日志文件,而不是使用--local-storage-path,但这没有帮助.
作为旁注,我几年来一直在使用PhantomJS执行相同的过程,只是顺序执行(一次运行一个PhantomJS进程).虽然有一些障碍需要克服,但效果很好.
知道是什么导致了这个吗?有人遇到过类似的问题吗?有关并行运行多个PhantomJS实例的建议吗?
谢谢!
| 归档时间: |
|
| 查看次数: |
1220 次 |
| 最近记录: |