См. Параметр resourceLimits , который можно передать конструктору Worker.
Цитирование из do c:
resourceLimits <Object>
Необязательный набор ограничений ресурсов для нового экземпляра механизма JS. Достижение этих ограничений приведет к прекращению работы экземпляра Worker. Эти ограничения влияют только на движок JS, и никакие внешние данные, включая ArrayBuffers. Даже если эти ограничения установлены, процесс все равно может прерваться, если он столкнется с глобальной ситуацией нехватки памяти.
maxOldGenerationSizeMb Максимальный размер основной кучи в МБ.
maxYoungGenerationSizeMb Максимальный размер пространства кучи для недавно созданных объектов.
codeRangeSizeMb Размер предварительно выделенного диапазона памяти, используемого для сгенерированного кода.
Я не видел ничего написанного о том, как nodejs выбирает эти значения по умолчанию, когда вы этого не делаете заполните их. Но указав их, вы получите некоторый контроль.
Я бы добавил, что nodejs не особенно эффективна для использования памяти при попытке вписаться в цель с ограниченными ресурсами. Он хранит в памяти вещи, которые, вероятно, на самом деле не нужны, как и весь исходный код, который он компилирует. Его характер G C дает ему более широкий диапазон использования памяти, чем выделение вручную. Это также особенно плохо при одновременном чтении больших наборов данных и разборе их на множество небольших строк, так как это может привести к высокому пиковому использованию памяти, даже при том, что многие из них получают мусор, когда все успокаивается.
Как В другом примере вы можете прочитать / проанализировать файл размером 10 МБ JSON, и он будет занимать 10-кратный объем памяти для хранения данных Javascript. Это вовсе не обвинение в nodejs (я большой поклонник), но нужно быть более осторожным с тем, как вы используете инструмент, если вы пытаетесь вписаться в меньшие объемы памяти. Рабочий поток - это куча дополнительных затрат памяти (это своя куча, собственный скомпилированный код и т. Д. c ...), гораздо больше, чем в C / C ++.