Задать вопрос
Jekins
@Jekins
Front-end developer

Сколько Nodejs сервер должен есть памяти сервера?

Всем доброго времени суток.
Столкнулся со следующей ситуацией и по-моему это не нормально:
У меня на сервере стоит MySQL база данных, на ней висят 2 сайта с маленькой посещалкой (500-700 человек в сутки), так вот эта база съедает 500-600 мб памяти сервера и как мне объяснили, это слишком много и мне необходимо базу оптимизировать. Может быть, база большая, обрабатывает запросы и возможно обращения к ней не особо оптимизированы, не знаю, но это может быть.
Но вот я поднял Nodejs сервер с самым стандартным api c CRUD на борту. Посмотрел сколько съедается памяти и обомлел, больше 1000 мб занимает Nodejs сервер, которые в данный момент даже запросы не обрабатывает, он просто запущен для личного использования. Это вообще нормально? Нод сервер так и должен есть память? Или у меня скорее всего где-то утечка памяти в конфигурации нод сервера?
  • Вопрос задан
  • 2829 просмотров
Подписаться 3 Оценить Комментировать
Решения вопроса 1
По умолчанию процесс Node.js расчитывает, что ему доступны аж 1.5 Gb памяти.

Параметр --max_old_space_size задаёт максимальный размер т.н. Old Space – части Heap, куда попадают неактивные и не нужные данные. Это, на практике, область, занимающая наибольшую память. Именно её есть смысл ограничить, чтобы процесс Node занимал поменьше памяти.

Но у меньшей памяти есть и своя цена: чаще будет запускаться «сбор мусора» (garbage colleciton) – процесс очистки из памяти неиспользуемых данных, к которым более нет ссылок из глобальных или активных локальных переменных. Это блокирующий процесс – Node полностью останавливается на время очистки памяти, не реагирует на запросы и не выполняет никаких действий.

Итого, чтобы занимать меньше памяти, нужно запускать Node с параметром:
node --max_old_space_size=128 index.js
Тут указано занимать под old data не более 128 Mb памяти, т.е. весь Node займёт незначительно больше.

Можно задать переменную окружения WEB_MEMORY которой установить доступный процессу node.js объем памяти в Mb: WEB_MEMORY=128 bash startup.sh , если использовать для запуска node приложения скрипт, предложенный автором статьи (на англ.), откуда я всё это только что сам узнал )
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
dummyman
@dummyman
диссидент-схизматик
У меня на сервере стоит MySQL база данных, на ней висят 2 сайта с маленькой посещалкой (500-700 человек в сутки), так вот эта база съедает 500-600 мб памяти сервера и как мне объяснили, это слишком много и мне необходимо базу оптимизировать.

Небось сайты Wordpress. Отключайте плагины, господа. И да прибудит вам производительность БД.
Но вот я поднял Nodejs сервер с самым стандартным api c CRUD на борту. Посмотрел сколько съедается памяти и обомлел, больше 1000 мб занимает Nodejs сервер, которые в данный момент даже запросы не обрабатывает, он просто запущен для личного использования.

Ищите утечки. Когда сервер запускается, сколько он весит? Каждый запрос увеличивает аппетиты? - Вы что-то сделали не правильно!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы