使用child_process打开的文件太多

时间:2011-03-08 04:12:45

标签: node.js ubuntu-10.04 ubuntu-10.10 rackspace

我只在我的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'));
  });
}

1 个答案:

答案 0 :(得分:3)

了解托管服务提供商设置文件限制的程度有所帮助:ulimit -n将告诉您每个进程的打开文件描述符数量的setrlimits(2)限制。典型安装使用1024。他们可能将其设置得更低,以限制内核内存的使用。

有一些硬性限制,您只能通过礼貌地询问Rackspace(除非您具有对/etc/security/limits.conf的写入权限)和软限制(可以提升到硬限制)来提高。他们可能已将软限制设置得较低,以试图减少资源使用,但保持硬限制更高。

了解当前使用的文件描述符node的数量也很有帮助。当您登录时,请检查/proc/$(pidof node.js)/fd/以查看打开的文件数量。也许你没有关闭文件或套接字或管道的速度尽快关闭它们?