使用child_process打开的文件过多

我只在我的Rackspace Ubuntu Maverick实例上得到以下错误…但是不在我的本地Ubuntu Lucid VM上:

pipe(): Too many open files pipe(): Too many open files child_process.js:223 var fds = this._internal.spawn(path, ^ Error: Error spawning at ChildProcess.spawn (child_process.js:223:28) at child_process.js:10:15 etc..etc.. 

生成它的代码:

 function getHeader(url, callback) { var client = spawn('curl', ['-I', url]); client.stdout.on('data', function(data) { client.kill('SIGTERM'); callback(data.toString('utf8')); }); } 

知道您的主机提供商设置了文件限制有多低会有帮助: ulimit -n会告诉您setrlimits(2)限制每个进程打开文件描述符的数量。 典型的安装使用1024 。 他们可能已经设置了很低的限制内核内存的使用。

有严格的限制,你只能礼貌地询问Rackspace(除非你有权写入/etc/security/limits.conf ),并且软限制可以提高到硬限制。 他们可能会设定较低的软限制,以尽量减less资源使用,但保持较高的硬性限制。

知道node当前正在使用多less个文​​件描述符也是有帮助的。 在login时,检查/proc/$(pidof node.js)/fd/以查看打开了多less个文件。 也许你没有尽快closures文件或套接字或pipe道?