Я использую 5k loc express приложение с множеством дополнительных зависимостей, включая express. Приложение говорит, что занимает около 60 МБ оперативной памяти RSS. Но когда я смотрю на фактическое использование оперативной памяти на моей машине с Linux, top
говорит мне, что она использует ~ 1200 МБ VIRT памяти, в то время как занимает только ~ 60 МБ RES (RSS) памяти.
Затем я написал простой test.js
сценарий, чтобы выделить случай:
setInterval(() => {
console.log(JSON.stringify(process.memoryUsage()));
} , 1000);
И запустил его, используя: node test.js
Он говорит, что использует около 30 МБ ОЗУ:
{"rss":30097408,"heapTotal":6537216,"heapUsed":3829224,"external":8272}
Снова глядя на память в команде top
, я вижу 30 МБ RES, но около 470 МБ VIRT.
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
8498 ted 20 0 485948 29928 23540 S 0,3 0,8 0:00.44 node
NodeJS не кажется таким легким.
Хостер моего приложения NodeJS (не тестового приложения) постоянно выделяет мне около 600 МБ памяти для приложения, но через несколько секунд уничтожает процесс моего узла из-за высокого использования памяти. Высокое использование виртуальной памяти (упомянутые 1200/3800 МБ) принимается за триггер. Итак, мои вопросы:
Почему использование виртуальной памяти для приложения так высоко по сравнению с фактически необходимой памятью? За что берется память?
Можно ли как-нибудь ограничить виртуальную память для NodeJS (она вообще используется?)?