儿童大量使用后死亡

我正在执行大约15 000次的phantomjs脚本,一遍又一遍地用于不同的网页。 我正在使用自己创build的队列系统,所以我只用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脚本的开头抛出。
如果我注销并重新login,那么在再次出现这些消息之前,我可以再运行该脚本,就像第一次运行该脚本一样。

对我来说,这听起来像一个内存/堆/垃圾收集问题。 但似乎无法find关于如何处理它的任何信息,除了确定使用多less内存的不同方法。 结论是脚本正在使用一个非常高的内存量,在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捕获生成后引发的ENOMEM错误这里的解决scheme似乎是花费你的内存,但我真的不认为我应该需要超过500MB的内存来读取2个网页。

我意识到我的问题可能是本地的,不幸的是,我没有代码来告诉你我认为问题可能在哪里。 对我来说,这一切都看起来不错 – 脚本是大的倾倒在这里..

我迷失了方向,一直试图找出两天的成功,所以我觉得有人会问我是否有其他人在我上面解释过的那样,在phanomjs或者subprocess中有问题,如果是的话,我能做些什么呢?