@maximabro
frontend developer

Как устранить утечку памяти в node-cron?

Есть функция переборки базы данных, которая выполняется раз в сутки в 23:45:

async deleteOldCoupons() {
    try {
      const db = require('../_helpers/db.js')
      const endedCoupons = []
      const dateNow = new Date()
      const coupons = await db.Post.findAll()

      coupons.forEach(i => {
        const date = new Date(i.endDate)
        if (date < dateNow) {
          endedCoupons.push(i)
        }
      })
      for (const coupon of endedCoupons) {
        const addCoupon = new db.PostOld({
          uin: coupon.uin,
          title: coupon.title,
          description: coupon.description,
          type: coupon.type,
          shopUin: coupon.shopUin,
          endDate: coupon.endDate,
          url: coupon.url,
          code: coupon.code,
          query: coupon.query,
          rating: coupon.rating,
          category: coupon.category,
          recomended: coupon.recomended
        })
        await addCoupon.save()

        await db.Post.destroy({
          where: {
            uin: coupon.uin
          }
        })
      }
    } catch (e) {
      console.log(e)
    }
  }

Код планировщика задач:

const cron = require('node-cron')
const service = require('./cron/service')

const checkEndedCoupons = cron.schedule('45 23 * * *', async () => {
  await service.deleteOldCoupons()
},
{
  timezone: 'Europe/Moscow'
})


checkEndedCoupons.start()

При запуске планировщика через pm2 потребляемая память со временем растёт, за час доходит до 500 мегабайт.
ОС: Ubuntu-20.04;
node.js: 16.15.1v;
pm2: 5.2.0v;

Вот так процесс выглядит спустя полчаса:

62e397be2d18f986269357.png
  • Вопрос задан
  • 360 просмотров
Решения вопроса 1
@maximabro Автор вопроса
frontend developer
Помогло изменение версии node.js c 16.13.0 на 16.10.0. Не знаю, с чем это связано
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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