Извлечение кучи из памяти Ошибка, даже если доступная память кучи намного больше используемой - PullRequest
0 голосов
/ 02 апреля 2019

Я получаю следующую ошибку, даже когда я запускаю узел с большой памятью кучи с помощью следующей команды: 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,79.Г.Доступное количество составляет 6,15G.Я использовал модуль v8 и process, чтобы получить эти числа.

Так что, очевидно, что-то еще, кроме размера кучи, вызывает проблему.модуль в основном сканирует большой CSV-файл и создает карту для последующего использования в процессе.Эта карта может иметь до 30 миллионов ключей.модуль отлично работал на других файлах меньшего размера (10 миллионов ключей).но он продолжает выдавать эту ошибку здесь, даже когда доступный размер кучи намного больше, чем используется.

Что еще может вызвать такую ​​проблему?

1 Ответ

3 голосов
/ 02 апреля 2019

V8 разработчик здесь. Несмотря на имена функций, которые вы видите в трассировке стека, речь идет не о нехватке памяти в целом, а о достижении максимального размера для одного объекта (в данном случае Map). Смотрите этот ответ, объясняя детали: https://stackoverflow.com/a/54466812/6036428

...