Node.js使用fs.readFileSync读取大文件

我尝试使用96GB RAM的服务器上的fs.readFileSync将大文件( 〜6Gb )加载到内存中。

问题是它失败并出现以下错误消息

RangeError:尝试分配大于最大大小的缓冲区:0x3fffffff个字节

不幸的是,我没有find如何增加缓冲区,这似乎是一个常数。

我如何克服这个问题,并用Node.js加载一个大文件?

谢谢!

从joyent常见问题解答 :

什么是节点进程的内存限制?

目前,默认情况下,v8在32位系统上具有512mb的内存限制,在64位系统上具有1gb的内存限制。 通过将–max_old_space_size设置为1024(〜1 GiB)(32位)和〜1741(〜1.7GiB)(64位)的最大值,可以提高限制,但build议您拆分单个进程如果你正在达到记忆的限制,那么你就可以成为几名工

如果您更详细地了解文件中的内容以及您正在使用的内容,我们可能会提供一些关于如何以大块方式处理它的想法。 如果它是纯数据,那么您可能希望使用数据库,并让数据库根据需要从磁盘获取内容并pipe理内存。

以下是该问题的最近讨论: https : //code.google.com/p/v8/issues/detail?id=847

而且,这里有一篇博客文章 ,声称你可以编辑V8源代码并重build节点以消除内存限制。 尝试这个在你自己的判断。