0

У меня есть 2 среды: одна из них - это хрюкающая среда, которая обрабатывает еженедельные процессы, которые вставляются в живую производственную базу данных. Другое - это прямое приложение с производственной базой данных.Запуск Node.js (на сервере Windows R2): Как я могу уменьшить объем ОЗУ, который потребляют мои задачи для ворчания?

Недавно я сделал несколько оптимизаций в Grunt для обработки и хранения данных в гораздо лучшем виде, в результате чего появилось более быстрое приложение и лучший общий UX. Моя проблема заключается в том, что обработка, которую я делаю во время еженедельного производства, потребляет много памяти и занимает около 10 часов. Я в порядке с этим занимает 10 часов, но моя проблема заключается в том, что использование памяти увеличивается примерно до 95%, а время ответа в реальном времени начинает сканирование и почти не реагирует, пока процесс grunt не завершится.

Мой вопрос ... без добавления дополнительной ОЗУ (сейчас его 8 ГБ), как я могу заставить Grunt запустить этот процесс, не затрагивая пользовательский интерфейс в реальном приложении? Спасибо за любые советы, которые вы можете предложить.

ответ

1

Я думаю, что «правильный» ответ здесь - использовать другую машину. Вы не должны запускать задачи массовой обработки на том же компьютере, который обслуживает ваш производственный веб-сайт по этой точной причине. Они, как правило, потребляют все доступные ресурсы, в результате чего ни один из них не остается на вашем веб-сервере.


Если — по какой-либо причине — другая машина не вариант, то вам необходимо определить, почему ваша основная задача потребляет столько памяти. node-inspector и memwatch - хорошие места для начала. Это позволит вам проверить кучу JavaScript, чтобы увидеть, что находится в памяти.

Однако, куча JS обычно ограничивается где-то между 1 и 1,9 ГБ (в зависимости от версии узла), так что если ваша основная задача использует более того, есть несколько возможностей:

  1. Там это дочерние процессы с несколькими узлами.
  2. Процесс вашего узла выделяет много памяти вне кучи JS. Обычно это означает, что у вас много (и/или очень больших) Buffer s, которые не попадают в список.
  3. Возможно, вы используете собственный (C++) модуль, который пропускает память.