Мне сложно понять, как Node.js действует в зависимости от параметра max-old-space-size
.
В моем случае, например, я использую два t2.small
экземпляра AWS (2 ГБ ОЗУ).
Не знаю почему, но я установил max-old-space-size=4096
(4 ГБ). Что в этом случае делает узел? Может ли такая конфигурация привести к возможному сбою выделения памяти?
Как определить правильное значение в max-old-space-size
зависимости от ресурсов сервера?
Мое приложение постоянно увеличивает использование памяти, и я пытаюсь понять все о внутреннем устройстве узла.
Ответы:
«Старое пространство» - это самый большой и наиболее настраиваемый раздел управляемой (также известной как «сборщик мусора») кучи V8 (то есть там, где находятся объекты JavaScript), и
--max-old-space-size
флаг контролирует ее максимальный размер. Когда потребление памяти приближается к пределу, V8 будет тратить больше времени на сборку мусора, чтобы освободить неиспользуемую память.Если потребление памяти кучи (т.е. живые объекты, которые GC не может освободить) превышает предел, V8 приведет к сбою вашего процесса (из-за отсутствия альтернативы), поэтому вы не хотите устанавливать его слишком низким. Конечно, если вы установите слишком высокое значение, то дополнительное использование кучи, которое позволит V8, может привести к тому, что ваша система в целом исчерпает память (и либо подкачка, либо уничтожение случайных процессов из-за отсутствия альтернативы).
Таким образом, на машине с 2 ГБ памяти я бы, вероятно, установил
--max-old-space-size
около 1,5 ГБ, чтобы оставить часть памяти для других целей и избежать подкачки.источник
d8 --help
:--max-old-space-size (max size of the old space (in Mbytes))
Обновление 2020
Эти параметры теперь официально задокументированы узлом . Для машины 2 ГБ вам, вероятно, следует использовать:
NODE_OPTIONS=--max-old-space-size=1536
Чтобы определить объем используемой памяти: Вы можете увидеть доступную память на машине Linux, используя
free -m
. Обратите внимание, что вы можете использоватьfree
иbuffers/cache
память вместе, какbuffers/cache
их можно выбросить (эти буферы и кеш - хороший способ использовать неиспользуемую память).Обратите внимание на официальную документацию, где
max-old-space-size
также упоминается:Следовательно значение выше. Учтите, что объем памяти, необходимый для базовой ОС, не сильно меняется, поэтому вы с радостью можете сделать 3,5 на машине 4 ГБ и т. Д.
источник
Эта ошибка возникает, когда память, выделенная для выполняемого приложения, меньше требуемой памяти. По умолчанию ограничение памяти в Node.js составляет 512 МБ. Чтобы увеличить эту сумму, вам нужно установить аргумент ограничения памяти
—-max-old-space-size
. Это поможет избежать проблемы с ограничением памяти.node --max-old-space-size=1024 index.js #increase to 1gb node --max-old-space-size=2048 index.js #increase to 2gb node --max-old-space-size=3072 index.js #increase to 3gb node --max-old-space-size=4096 index.js #increase to 4gb node --max-old-space-size=5120 index.js #increase to 5gb node --max-old-space-size=6144 index.js #increase to 6gb node --max-old-space-size=7168 index.js #increase to 7gb node --max-old-space-size=8192 index.js #increase to 8gb
https://medium.com/@vuongtran/how-to-solve-process-out-of-memory-in-node-js-5f0de8f8464c
источник
node --v8-options
), что по умолчанию сообщается 4096, и без настройкиmax-old-space-size
набора тестов, который я запускаю, без проблем выделяется до 1,5 ГБ. Ссылка на статью среднего уровня относится к 2016 году, так что, вероятно, с момента ее написания все изменилось.node -e "console.log(`node heap limit = ${require('v8').getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)"
-> v12.18.0 и v14.3.0 -> 2096Mb, v10.20.1 -> 1432Mbheap_size_limit
. Для обычной оболочки UNIX ее нужно указывать по-другому:node -e 'console.log(`node heap limit = ${require("v8").getHeapStatistics().heap_size_limit / (1024 * 1024)} Mb`)'
Если вы просто хотите, чтобы он работал над проектом, над которым вы работаете, выполните два шага:
В вашем проекте cd to node_module / @ angular cd node_module / @ angular
Теперь запустите команду ниже export NODE_OPTIONS = - max-old-space-size = 8192
источник