儿童过程在大量使用后死亡

时间:2015-09-03 09:21:33

标签: node.js phantomjs child-process

我正在执行一个大约15000次的phantomjs脚本,一遍又一遍地执行不同的网页。我正在使用自己创建的队列系统,因此我只使用方法execFile运行2个进程。 (队列如何一次生成/组合,但队列的大小,用sizeof测量,只有大约20mb)

过了一会儿,我的nodejs脚本开始向我发回这条消息:

{ [Error: Command failed: /home/ec2-user/bot/node_modules/phantomjs/lib/phantom/bin/phantomjs /home/ec2-user/bot/phantomjs-script.js http://www.example.com/foo/bar
]
  killed: true,
  code: null,
  signal: 'SIGTERM',
  cmd: '/home/ec2-user/bot/node_modules/phantomjs/lib/phantom/bin/phantomjs /home/ec2-user/bot/phantomjs-script.js http://www.example.com/foo/bar' }

如果我然后重新启动脚本,则会从nodejs脚本的开头抛出这些消息 如果我退出并重新登录,那么我可以在再次出现这些消息之前运行脚本,就像第一次运行脚本一样。

对我而言,这听起来像是内存/堆/垃圾回收问题。但似乎无法找到有关如何处理的任何信息,除了确定使用多少内存的不同方法。结论是脚本使用的内存非常大,介于20-500 mb之间,用memoryUsage

测量

...导致此错误最终被抛出:

child_process.js:1155
    throw errnoException(err, 'spawn');
          ^
Error: spawn ENOMEM
    at exports._errnoException (util.js:746:11)
    at ChildProcess.spawn (child_process.js:1155:11)
    at exports.spawn (child_process.js:988:9)
    at Object.exports.execFile (child_process.js:682:15)
    at /home/ec2-user/bot/main.js:66:20
    at worker (/home/ec2-user/bot/main.js:20:9)
    at wrapper [as _onTimeout] (timers.js:265:14)
    at Timer.listOnTimeout (timers.js:110:15)

这个问题解释了这个错误Node.js catch ENOMEM error thrown after spawn这里的解决方案似乎是花费你的记忆,但我真的认为我当时不需要超过500mb的内存来读取2个网页。 / p>

我意识到我的问题可能是本地的,遗憾的是我没有代码可以告诉你我认为问题可能在哪里。对我而言,这一切看起来都很好 - 脚本很大,可以转移到这里..

我迷失在这里,并试图弄清楚它已经2天没有取得任何成功,所以我觉得编译问我是否有其他人像我上面解释的那样,对phanomjs或子进程有问题,并且如果是的话,我能做些什么呢?

0 个答案:

没有答案