2015-10-29 4 views
13

Есть ли способ явно отключить выполнение GC (по крайней мере, наиболее трудоемких, например, прерываний GC в старом пространстве) в течение указанного периода времени, при выполнении некоторого кода, чувствительного к задержки? Что-то вроде этого:Отключить сборку мусора node.js на некоторое время

disableGc(); 
runCodeWithoutDelays(); 
enableGc(); 

Возможно, с использованием некоторых параметров узла или собственных модулей? Или я могу написать свой собственный модуль, есть ли API для V8?

+0

Хммм, будет [это] (https://github.com/bnoordhuis/node-idle-gc) работать на вас? – thefourtheye

+0

Не совсем. Это вызовет неинкрементные основные прогоны GC (mark-sweep-compact), которые довольно тяжелы и вводят длительные задержки по сравнению с быстрыми инкрементальными прогонами. Вместо того, чтобы запускать GC самостоятельно, я хотел бы заблокировать GC в течение некоторого времени и снова отпустить его для нормальной работы. – artch

+0

Я бы порекомендовал поднимать этот вопрос как ошибку в списке рассылки Node.js repo и v8. – thefourtheye

ответ

3

Насколько я знаю, вы не можете вручную остановить сборщик мусора v8, единственное, что вы можете сделать, это запустить gc-процесс вручную с помощью global.gc(), но не остановить процесс v8.

0

Другой человек был один и тот же вопрос и опубликовал вопрос на GitHub здесь: https://github.com/nodejs/help/issues/462

Ответ вы не можете отключить GC в узле, но вы можете по крайней мере, настроить параметры памяти, чтобы использовать максимальное доступное пространство и задержки GC, используя --max_old_space_size, --max-semi-space-size.

Приведен пример в контексте.

Смежные вопросы