来自nodejs的

时间:2016-03-12 12:57:27

标签: node.js phantomjs

我正在开发一个项目,我需要从nodejs生成/执行多个进程来调用大约50-100的phantomjs,这应该很容易处理。 这些是我遵循的步骤:

1.nodejs(无限循环)总是运行以检查条件,如果满足条件,

  1. nodejs生成或执行一个新进程来调用phantomjs。
  2. 虽然我在完成幻像任务后退出(phantom.exit()),但是如果我执行了太多的进程,请从nodejs说100,在大多数phantomjs进程输出中我得到了phantomjs崩溃。

    是因为进程太多了吗?但我认为50-100不是太多,这样一个广泛使用的框架(phantomjs)必须能够处理我认为的最少500个请求。

    如果我在某个地方出错,请帮忙,如果我遗失了什么。

    我目前正在使用exec tp calll phantom

    child = execFile(binPath, args, function (error, stdout, stderr) { ---my code here---- });
    

    和phantomjs文件太长了,我认为这样就足以让我退出:

        setTimeout(function() {
            phantom.exit();
        }, 0);
    

    提前感谢:)

2 个答案:

答案 0 :(得分:0)

消耗的内存是进程数量和每个进程使用的内存的函数。我认为内存泄漏会对您运行的子进程产生更大的影响。

Phantomjs有一个已知的内存泄漏。这可能是你的问题。

大约50页左右加载后再次执行您的PhantomJS子进程。

您可以通过传递命令行参数传递从中断处获取所需的信息。

https://github.com/ariya/phantomjs/issues/11390

答案 1 :(得分:0)

这是我解决它的问题, 我一次只执行了30个请求,并将其余的请求保留在队列中,我在前30个请求中将计数器从0到30递减,然后在请求完成时将每个请求递减1。 我保留了一个requestQueue,我不断地提出这样的请求:

var requestQueue = {}
var counter = 0;
requestQueue.push(--anyreq--);

    setInterval(function() { // check frequently if there is a space to send more request to phantom

    if(counter < 30 && requestQueue.length > 0 ){
            counter++;   //increement the counter while sending spawning req for phantom

            var reqforPhantom = requestQueue.shift(); 

    //spawn or exec a req for phantomjs sending 'reqforPhantom' (this is something you want to send to phantom script, if you don't want to send anything you could remove request queue from this code) variable
    //decrement the counter on response
              counter--;
    }
    },100);