fs.writeFileSync给出错误:UNKNOWN,在nodejs中写入同步文件的正确方法

我有一个NodeJS服务器应用程序。 我有我的日志logging的这一行代码:

fs.writeFileSync(__dirname + "/../../logs/download.html.xml", doc.toString()); 

有时它可以正常工作,但是在负载较重的情况下,会产生这种exception

 Error: UNKNOWN, unknown error 'download.html.xml' 

PS:我在这里find了一个链接: http ://www.daveeddy.com/2013/03/26/synchronous-file-io-in-nodejs/ Blogger描述了writeFileSync并没有真正完成写回来。 有没有任何正确的方法来做同步的方式,即没有callback?

对于OP来说似乎很欣赏这个评论,我把它放在了回应之中,希望它能帮助其他用户。

在我看来,这个问题是由于writeFileSync调用了很多描述符而造成的。 在问题中发布的链接似乎也证实了这个想法。

实际上,我仍然试图弄清楚是否存在一种方法来知道写入实际上是在什么时候完成的,而不仅仅是从nodejs的angular度来看。 也许这个参数可以帮助,但我想它遭受同样的问题。

无论如何,人们可以通过实施一个队列来写他的写请求的作家池解决这个问题。

亲是打开描述符的数量可以保持在控制之下。 事实上,由于OP发布的链接中提到的问题,确实不是这样,当然可以避免耗尽系统的所有资源。

另一方面,不幸的是,这个解决scheme往往会占用更多的内存(因为其中一个实际上是在等待可用的工作人员在那里停放他的文档)。

当然,这可能是一个合适的解决scheme,用于突发请求的时间分离,但也许它不适合固定负载时间不变。

当你做一个writeFileSync你得到一个文件描述符到文件。 操作系统限制了在给定时间可以打开的文件描述符的数量。 所以,在大量使用的情况下,你可能真的达到了极限。 其中一种方法是使用ulimit并将其设置为无限制。

另一个可能性是IO错误。 例如,如果发生IO错误,closures文件描述符将失败。