waterline.js кеширует коллекцию и, если это происходит, взрывает сервер, занимая много памяти? - PullRequest
0 голосов
/ 27 марта 2019

Мы недавно пересекли 130 тыс. Документов в одной из наших коллекций. С тех пор мы сталкиваемся с проблемой более высокого потребления памяти с помощью nodejs. Мы используем паруса waterline.js orm для запроса mongodb. Таким образом, любой вызов, сделанный в db через API ватерлинии, например Model.create, запускает инкремент, и процесс узла продолжает потреблять оперативную память до ~ 1,8 ГБ, затем он взрывается и перезапускается. Я пытаюсь отладить проблему за последнюю неделю. И я не мог найти никакого решения. Пожалуйста, помогите.

Когда я удалил все данные коллекции, сервер не показывает потребление памяти. Но возвращение 130K документов создает проблему снова.

Для бывших - у меня есть конечная точка регистрации пользователя /user
Вызывает следующие модели в строке

let user = await User.create(data);
let model2 = await Model2.create(userdata);
let model3 = await Model3.create(model2Data)
let model4 = await Model4.create(data2);

Обратите внимание, что все эти модели не имеют слишком много данных. Модель, которая имеет 130K данных, является другой моделью.

Я взял дамп кучи предыдущего и более позднего состояния узла vm. screentshot Изучая инструменты chrome dev, я обнаружил, что в память загружено много данных в БД (подчеркнуто на рисунке. Эти данные принадлежат другой модели / коллекции, называемой оценками), но наша конечная точка /user никогда не вызывает и не взаимодействует с этими моделями. Поэтому я полагаю, что это ватерлинии или что-то еще.

1 Ответ

0 голосов
/ 27 марта 2019

Таким образом, было отображение ватерлинии на коллекцию пользователей и другие коллекции, включая ту, в которой было так много данных.Удаление избыточных ассоциаций между пользователем и другими коллекциями устранило утечку памяти.

...