使用child_process打开的文件太多

mkr*_*cny 5 rackspace node.js ubuntu-10.04 ubuntu-10.10

我只在我的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..
Run Code Online (Sandbox Code Playgroud)

生成它的代码:

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

sar*_*old 3

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

有硬限制,您只能通过礼貌地询问 Rackspace 来提高(除非您具有对例如的写入权限/etc/security/limits.conf),还有软限制,可以提高到硬限制。他们可能将软限制设置得较低,以尽量减少资源使用,但将硬限制设置得较高。

node了解当前正在使用多少个文​​件描述符也很有帮助。登录后,检查/proc/$(pidof node.js)/fd/打开的文件数量。也许您没有尽快关闭文件、套接字或管道?