我只在我的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'));
});
}
答案 0 :(得分:3)
了解托管服务提供商设置文件限制的程度有所帮助:ulimit -n
将告诉您每个进程的打开文件描述符数量的setrlimits(2)
限制。典型安装使用1024
。他们可能将其设置得更低,以限制内核内存的使用。
有一些硬性限制,您只能通过礼貌地询问Rackspace(除非您具有对/etc/security/limits.conf
的写入权限)和软限制(可以提升到硬限制)来提高。他们可能已将软限制设置得较低,以试图减少资源使用,但保持硬限制更高。
了解当前使用的文件描述符node
的数量也很有帮助。当您登录时,请检查/proc/$(pidof node.js)/fd/
以查看打开的文件数量。也许你没有关闭文件或套接字或管道的速度尽快关闭它们?