Отладка утечки памяти в экспресс-приложении

У меня есть утечка памяти в моем экспресс-приложении. Память RSS начинается примерно с 80 МБ и со временем медленно увеличивается, достигая 2-3 ГБ за пару дней. Я попытался использовать флаг --inspect для запуска процесса и отладки в инспекторе Chrome, но не смог выяснить точную проблему. Распределение объектов за период времени в этом случае не так велико. Наибольшее потребление памяти приходится на строки, как видно на приложенном скриншоте. Может ли кто-нибудь указать мне правильное направление, чтобы исправить эту утечку?введите здесь описание изображения

Я также прикрепил график RSS. Снижение памяти связано с выключением сервера. введите здесь описание изображения

Платформа: Linux — Ubuntu 18.04.5


person Aditya Varma    schedule 23.12.2020    source источник
comment
Любой шанс, что вы можете поделиться своим кодом, например. через гитхаб?   -  person eol    schedule 23.12.2020
comment
@eol К сожалению, я не могу поделиться исходным кодом. Это производственное приложение.   -  person Aditya Varma    schedule 23.12.2020
comment
Кажется, что ваш процесс JavaScript не вызывает утечку (если на первом изображении действительно показан снимок экрана до и после). Вы печатаете что-то в консоли? Поскольку при открытых инструментах разработчика весь вывод консоли будет сохранен в памяти. Это может быть потенциальной причиной. Закрытие инструментов разработчика должно освободить всю память.   -  person WolverinDEV    schedule 23.12.2020
comment
@WolverinDEV Конечно, ведется много журналов, но я подозреваю, что это как-то связано с утечкой памяти. Дамп не сильно меняется с течением времени. RSS значительно растет. Я прочитал несколько статей и выяснил, что это скорее раздувание памяти, чем утечка памяти.   -  person Aditya Varma    schedule 24.12.2020
comment
@AdityaVarma Ну, я тоже так делал, но на самом деле оказалось, что проблема в моем приложении (у меня было точно такое же поведение). Вы можете попробовать отключить ведение журнала и присмотреться. Значительное увеличение RSS может быть связано с раздуванием/фрагментацией памяти, но, судя по опыту, JS прекрасно знает об этом. Используете ли вы нативные модули?   -  person WolverinDEV    schedule 25.12.2020
comment
@WolverinDEV Я использую некоторые нативные модули. Я выполнил следующую команду, чтобы узнать, какие нативные модули используются: find node_modules -type f -name "*.node" 2>/dev/null | grep -v "obj\.target" Нативные модули: iconv.node node_expat.node genx.node sharp.node fsevents.node gcstats.node unix_dgram.node   -  person Aditya Varma    schedule 06.01.2021


Ответы (1)


Ну, это был родной модуль sharp с утечкой памяти. Он используется в приложении для обработки изображений. Нам нужно запустить приложение с libjemalloc, которое лучше работает с освобождением неиспользуемой памяти обратно в ОС. Мы можем установить распределитель памяти с помощью следующей команды:

LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libjemalloc.so.1
person Aditya Varma    schedule 11.01.2021