Распределение массива Node.js - недостаточно памяти - PullRequest
1 голос
/ 08 июня 2019

Фон

Я внедряю тестовую среду для измерения сложности проблемы, наблюдая, как изменяется потребляемое время по мере увеличения размера проблемы (1000, 10000, 100000 и т. Д.).

Выпуск

Я хочу тестировать с большими числами, поскольку время, затрачиваемое на выполнение этих тестов с небольшими числами, может сильно различаться. Однако процесс node завершается сбоем, когда в куче не хватает памяти. Это происходит, когда я пытаюсь выделить массив размером 100000000.

Вот вывод ошибки:

<--- Last few GCs --->

[16528:000001D288DD3880]    58236 ms: Scavenge 467.8 (490.7) -> 452.1 (490.7) MB, 0.5 / 0.0 ms  (average mu = 0.954, current mu = 0.951) allocation failure
[16528:000001D288DD3880]    58263 ms: Scavenge 467.8 (490.7) -> 452.1 (490.7) MB, 0.5 / 0.0 ms  (average mu = 0.954, current mu = 0.951) allocation failure
[16528:000001D288DD3880]    58283 ms: Scavenge 467.8 (490.7) -> 452.1 (490.7) MB, 0.4 / 0.0 ms  (average mu = 0.954, current mu = 0.951) allocation failure


<--- JS stacktrace --->

==== JS stack trace =========================================

    0: ExitFrame [pc: 0000033BDAD5C5C1]
Security context: 0x00b07821e6e9 <JSObject>
    1: getArray [00000171693C1EA1] [file.ts~7] [pc=0000033BDAFFEC3F](this=0x01716938e449 <Object map = 000000223D38E439>,length=100000000,max=0x025631721d11 <Number 9.0072e+15>)
    2: heapsortTest(aka heapsortTest) [0000002040FFF699] [...

FATAL ERROR: invalid array length Allocation failed - JavaScript heap out of memory
 1: 00007FF73EC6F04A v8::internal::GCIdleTimeHandler::GCIdleTimeHandler+5114
 2: 00007FF73EC4A0C6 node::MakeCallback+4518
 3: 00007FF73EC4AA30 node_module_register+2032
 4: 00007FF73EED20EE v8::internal::FatalProcessOutOfMemory+846
 5: 00007FF73EED201F v8::internal::FatalProcessOutOfMemory+639
 6: 00007FF73F3F2BC4 v8::internal::Heap::MaxHeapGrowingFactor+9556
 7: 00007FF73EFADC70 v8::internal::Factory::NewFixedDoubleArray+240
 8: 00007FF73F025F8B v8::internal::HashTable<v8::internal::NumberDictionary,v8::internal::NumberDictionaryShape>::KeyAt+60555
 9: 00007FF73F013916 v8::internal::HashTable<v8::internal::NumberDictionary,v8::internal::NumberDictionaryShape>::EntryToIndex+66198
10: 00007FF73F416B60 v8::internal::Bitmap::IsClean+29728
11: 0000033BDAD5C5C1

Вот как я запускаю процесс:

node -r ts-node/register --max-old-space-size=8192 --expose-gc heap/heapsort-test.ts

На моей машине установлено 16 ГБ ОЗУ.

Вопрос

Что я могу сделать, чтобы запустить большие тесты?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...