Снимок кучи Node.js, заполненный строками старых версий кода - PullRequest
0 голосов
/ 05 февраля 2019

Я постоянно развертываю сервер API Node.js.Использование памяти работающим процессом растет по мере развертывания новых версий службы, несмотря на минимальные изменения кода и зависимостей.Кроме того, использование памяти не одинаково в аналогичных средах, несмотря на то, что они имеют одинаковый код и версию Node.js (v8.12.0) и аналогичное использование и время безотказной работы.

Например, в одной более старой среде сервер APIпосле перезапуска используется ~ 600 МБ, а в другой более молодой, но идентичной среде - после перезапуска ~ 370 МБ.

Чтобы исследовать использование памяти, я сделал снимок кучи с помощью Chrome Dev Tools.Сводка показала, что куча была около 88% строк:

snapshot statistics

Глядя на ~ 900k строк в снимке, подавляющее большинство из них, кажется, строки, содержащие старые версиикода сервера API:

snapshot strings

Как видно из названия файла в разделе сведений внизу, эта строка является полным кодом очень старой версии исходного файла.Существуют сотни версий (казалось бы, всех) старых исходных файлов.Эти файлы были удалены с сервера во время процесса выпуска, но каким-то образом оказались в куче процесса API.

Я попытался запустить процесс с уменьшенным --max-old-space-size, и это вызывает сбой программы во время ееначинается.

Я не могу определить, каким образом / почему предыдущий исходный код заканчивается строками в куче процесса.Я использую каталог с символической ссылкой current, который указывает на последнюю версию.Возможно, также уместно, что я использую babel для переноса нашего исходного кода (когда-то давно для async / await, теперь для импорта ES6).

Почему Node.js добавляет старые исходные файлы в виде строк в кучу икак я могу предотвратить это?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Так что это в конечном итоге вызвано кэшем Babel.Все еще доходя до сути, но удаление 200 МБ ~/.babel.json файла, который рос в домашнем каталоге пользователей API, похоже, решило проблему.Теперь служба успешно работает, используя около 90 МБ памяти.Следуя этим инструкциям , отключите кеш при запуске приложения, решил это за меня.

0 голосов
/ 05 февраля 2019

Я не знаю, как работает внутреннее устройство nodejs.Но может быть вероятность того, что кеш узла каким-то образом разрешает символические ссылки и хранит старые сценарии.

Вы пытались переместить / удалить старые версии из того места, где они расположены?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...