我尝试使用具有96GB RAM的服务器上的fs.readFileSync将大文件(〜6Gb)加载到内存中。
问题是它失败并显示以下错误消息
RangeError:尝试分配大于最大大小的缓冲区:0x3fffffff字节
不幸的是,我找不到增加Buffer的方法,这似乎是一个常数。
如何克服此问题并使用Node.js加载大文件?
谢谢!
来自一个快乐的常见问题解答:
节点进程的内存限制是多少?
当前,默认情况下,v8在32位系统上的内存限制为512mb,在64位系统上的内存限制为1gb。可以通过将--max_old_space_size设置为最大〜1024(〜1 GiB)(32位)和〜1741(〜1.7GiB)(64位)来提高限制,但是建议您拆分单个进程如果您要达到内存限制,则分成几个工作组。
如果您显示有关文件中的内容以及如何使用它的更多详细信息,我们可能会提供一些有关如何分块使用它的想法。如果是纯数据,则您可能希望使用数据库,并让数据库根据需要从磁盘获取内容并管理内存。
以下是有关该问题的最新讨论:https : //code.google.com/p/v8/issues/detail?id=847
并且,这是一篇博客文章,声称您可以编辑V8源代码并重建节点以消除内存限制。您可以自行决定尝试此操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句