Задать вопрос
spacecucumber
@spacecucumber
Full stack web DEVV - Node PHP etc.

Утечка памяти при использовании Sequelize, ORM решение для NodeJS — что делать?

День добрый, подключил недавно Sequelize по примеру с https://github.com/sequelize/express-example. С единственным отличием, что на экспорт я даю все модели, а не пихаю в один объект. Что-то типо:
fs.readdirSync(__dirname+"/../orm").forEach(function(model) {
            if (model.substr(-3) == ".js")
                module.exports[model] = connections[db].import('../orm/' + model);
        }
    );

При тестовом забеге, на вставку ~4000 строк, NodeJs начинает отжирать память и назад не отдает. При достижении 500 Мб, напрочь отказывается сотрудничать.
Где может быть проблема? Все по примеру с github`a
P.S. Для запуска использую модуль PM2
  • Вопрос задан
  • 718 просмотров
Подписаться 2 Оценить Комментировать
Решения вопроса 1
pomeo
@pomeo
Нет никакой утечки, у ноды ленивый сборщик, который начинает работать после того как займёт 1.5Гб оперативки. Поиграйтесь с ключами node --max_old_space_size=256
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
MarcusAurelius
@MarcusAurelius Куратор тега Node.js
автор Impress Application Server для Node.js
Это потому, что модель попадает в require.cache да еще и под разными именами. И скорее всего Вы это делаете несколько раз, не только при старте, и забиваете кеш, нужно или памяти доставить или сократить объем модели или подгружать частями и потом удалять из кеша через delete require.cache[require.resolve('moduleName')] или не в кеш пихать, а в свои структуры данных.
Ответ написан
spacecucumber
@spacecucumber Автор вопроса
Full stack web DEVV - Node PHP etc.
router.get('/test', hutils.authChecker, function(req, res, next) {
    Project.findById(1,{ include : [Player]}).then(function(project) {
        return Promise.denodeify(async.map)(project.Players, function(player, callback) {
            Player.create({
                project_id : 1,
                name       : 'iter_'+Math.floor(Math.random() * 1000000)+Math.floor(Math.random() * 1000000)
            }).then(function(gamer) {
                callback(null, gamer)
            });
        });
    }).then(function(plrs) {
        return Promise.denodeify(async.map)(plrs, function(guy, callback) {
            guy.update({name : sqlRequest+'zzzzz'+Math.random()}).then(function(number) {
                callback(null, number);
            });
        });
    }).then(function(numbers) {
        return Player.findAll({where : {name : {$like : '%zzzzz%'}}});
    }).then(function(zets) {
        return Promise.denodeify(async.map)(zets, function(zet, callback) {
            zet.destroy().then(function(number) {
                callback(null, number);
            });
        });
    }).catch(function(err) {
        next(err);
    });
});
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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