如何避免EMFILE,打开错误?
我得到的错误:
EMFILE, open <filename>
我不认为这是打开文件太多的情况。
当我运行ulimit
,输出是: unlimited
,所以我不认为这是问题。 我创build了许多子目录,当创build子目录时,我调用fs.exists
在做fs.writeFile
之前检查目录是否真实存在
问题是什么 ?
编辑:ulimit -n输出1024
你不应该使用writeFile甚至appendFile,他们都打开文件到每个追加。
使用stream更好。 您可以pipe理自己的文件句柄,并在需要时closures它,或不
var stream = fs.createWriteStream("append.txt", {flags:'a'}); stream.write("data"); stream.end;
你应该尝试优雅的FS: https : //github.com/isaacs/node-graceful-fs
正如描述所述,它将open和readdir调用排队,并且如果有太多文件描述符出现EMFILE错误,则会在closures时重试它们。
这是一个很好的解释: http : //blog.izs.me/post/56827866110/wtf-is-emfile-and-why-does-it-happen-to-me