最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

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

IT培训 admin 1浏览 0评论

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

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

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

RangeError:尝试分配大于最大大小的Buffer:0x3fffffff bytes

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

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

谢谢!

回答如下:

来自joyent FAQ:

节点进程的内存限制是多少?

目前,默认情况下,v8在32位系统上的内存限制为512mb,在64位系统上的内存限制为1GB。通过将--max_old_space_size设置为最大值~1024(~1 GiB)(32位)和~1741(~1.7GiB)(64位)可以提高限制,但建议您拆分单个进程如果你达到内存限制,你可以分成几个工作人员。

如果您显示有关文件中的内容以及您正在使用它的内容的更多详细信息,我们可能会提供有关如何以块的形式使用它的一些想法。如果它是纯数据,那么您可能希望使用数据库并让数据库根据需要处理从磁盘获取内容并管理内存。

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

而且,这里是a blog post声称您可以编辑V8源代码并重建节点以删除内存限制。请自行决定尝试。

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

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

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

RangeError:尝试分配大于最大大小的Buffer:0x3fffffff bytes

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

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

谢谢!

回答如下:

来自joyent FAQ:

节点进程的内存限制是多少?

目前,默认情况下,v8在32位系统上的内存限制为512mb,在64位系统上的内存限制为1GB。通过将--max_old_space_size设置为最大值~1024(~1 GiB)(32位)和~1741(~1.7GiB)(64位)可以提高限制,但建议您拆分单个进程如果你达到内存限制,你可以分成几个工作人员。

如果您显示有关文件中的内容以及您正在使用它的内容的更多详细信息,我们可能会提供有关如何以块的形式使用它的一些想法。如果它是纯数据,那么您可能希望使用数据库并让数据库根据需要处理从磁盘获取内容并管理内存。

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

而且,这里是a blog post声称您可以编辑V8源代码并重建节点以删除内存限制。请自行决定尝试。

发布评论

评论列表 (0)

  1. 暂无评论