5

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

1 回答 1

3

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

有硬限制,你只能通过礼貌地询问 Rackspace 来提高(除非你对 eg 有写权限/etc/security/limits.conf),还有软限制,可以提高到硬限制。他们可能将软限制设置得较低,以试图降低资源使用率,但将硬限制保持较高。

node了解当前使用了多少文件描述符也会很有帮助。登录后,查看/proc/$(pidof node.js)/fd/打开的文件数量。也许您没有像关闭文件、套接字或管道一样快地关闭它们?

于 2011-03-08T06:24:14.927 回答