即使可用堆内存比使用的大得多,也会出现堆内存不足错误
Getting Heap out of memory Error even when available heap memory is much larger than used
即使我 运行 具有高堆内存的节点使用以下命令,我也会收到以下错误:node --max-old-space-size=8000 manipulateFiles.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 文件并构建一个地图供以后在此过程中参考。这张地图最多可以有 3000 万个键。该模块在其他较小的文件(1000 万个密钥)上运行良好。但是即使可用的堆大小远远大于使用的大小,它也会在此处不断出现此错误。
还有什么可能导致这样的问题?
这里是 V8 开发人员。尽管您在堆栈跟踪中看到了函数名称,但这并不是整体内存不足,而是关于 运行 到单个对象的最大大小(在本例中为 Map
)。看到这个解释细节的答案:
即使我 运行 具有高堆内存的节点使用以下命令,我也会收到以下错误:node --max-old-space-size=8000 manipulateFiles.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 文件并构建一个地图供以后在此过程中参考。这张地图最多可以有 3000 万个键。该模块在其他较小的文件(1000 万个密钥)上运行良好。但是即使可用的堆大小远远大于使用的大小,它也会在此处不断出现此错误。
还有什么可能导致这样的问题?
这里是 V8 开发人员。尽管您在堆栈跟踪中看到了函数名称,但这并不是整体内存不足,而是关于 运行 到单个对象的最大大小(在本例中为 Map
)。看到这个解释细节的答案: