javascript - 即使可用堆内存远大于已用内存,也会出现堆内存不足的错误

标签 javascript node.js dictionary v8 es6-map

即使使用以下命令运行具有高堆内存的 Node ,我也会收到以下错误:node --max-old-space-size=8000 OperateFiles.js

FATAL ERROR: invalid table size Allocation failed - JavaScript heap out of memory
1: 0x8dc510 node::Abort() [node]
2: 0x8dc55c  [node]
3: 0xad9b5e v8::Utils::ReportOOMFailure(v8::internal::Isolate*, char const*, bool) [node]
4: 0xad9d94 v8::internal::V8::FatalProcessOutOfMemory(v8::internal::Isolate*, char const*, bool) [node]
5: 0xec7bf2  [node]
6: 0x102d7b2 v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::Allocate(v8::internal::Isolate*, int, v8::internal::PretenureFlag) [node]
7: 0x1030946 v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::Rehash(v8::internal::Handle<v8::internal::OrderedHashMap>, int) [node]
8: 0x1030f69 v8::internal::OrderedHashTable<v8::internal::OrderedHashMap, 2>::EnsureGrowable(v8::internal::Handle<v8::internal::OrderedHashMap>) [node]
9: 0x1114c7e v8::internal::Runtime_MapGrow(int, v8::internal::Object**, v8::internal::Isolate*) [node]
10: 0x908bb15be1d 
Aborted (core dumped)

崩溃时使用的堆内存量为 1.79G。可用量为6.15G。我使用 v8 模块和 process 来获取这些数字。

所以显然除了堆大小之外还有其他原因导致了这个问题。该模块基本上扫描一个大型 CSV 文件并构建一个 map 以供以后在该过程中引用。该 map 最多可以有 3000 万个键。该模块在其他较小的文件(1000 万个 key )上运行良好。但即使可用的堆大小远远大于正在使用的大小,它仍然会在这里出现此错误。

还有什么可能导致这样的问题?

最佳答案

V8 开发人员在这里。尽管您在堆栈跟踪中看到了函数名称,但这并不是总体内存不足,而是遇到单个对象(本例中为 Map)的最大大小。请参阅解释详细信息的答案:https://stackoverflow.com/a/54466812/6036428

关于javascript - 即使可用堆内存远大于已用内存,也会出现堆内存不足的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55465821/

相关文章:

mysql - 使用 Sequelize 创建数据库索引

python - 使用Python将List转成json格式

javascript - jQuery .each()、.find() 和 .append() 仅适用于最后一个节点?

node.js - 在哪里可以找到 NodeJS Firebase Admin SDK 的所有错误返回代码?

javascript - Node.js - 需要空路径

c# - 使用变量设置字典键和值类型

c# - 将嵌套类转换为字典

javascript - Bootstrap 下拉设置选定值

javascript - Window.Print() 在 chrome/Firefox 中不工作

javascript - ng-controller 不适用于 kendo tabstrip 选项卡内容