kue icon indicating copy to clipboard operation
kue copied to clipboard

MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 job ttl exceeded listeners added. Use emitter.setMaxListeners() to increase limit

Open bahatron opened this issue 6 years ago • 5 comments

I'm getting (node:38) MaxListenersExceededWarning: Possible EventEmitter memory leak detected. 11 job ttl exceeded listeners added. Use emitter.setMaxListeners() to increase limit

my Kue implementation:

const kue = require('kue')
const $raven = require('./Raven')
const $jobs = require('../config/jobs')

const queue = kue.createQueue({
    // supress job level events
    jobEvents: false,
    // config redis connection
    redis: {
        host: process.env.REDIS_HOST || '127.0.0.1',
        port: process.env.REDIS_PORT || 6379
    }
})

queue.on('error', function (err) {
    console.log('Kue error \n', err)
    $raven.captureException(err)
})

// register jobs
Object.keys($jobs).forEach(name => {
    queue.process(name, $jobs[name])
})

module.exports = queue

a job declaration example

    'supplier-notify-created': async function (job, done) {
        try {
            console.log('notifying supplier was created...')
            let { message } = job.data

            await $axios({
                method: 'POST',
                url: $api.crmSupplierWebhook(),
                data: {
                    message
                }
            })

            console.log('successfully notified supplier was created')

            done()
        } catch (err) {
            console.log('error notifying supplier created', err)
            $raven.captureException(err)
            done(err)
        }
    }

job registration

const supplierNotifyUpdated = function (req, res) {
    let { message, user, supplierUuid } = req.body

    if (!message || !user || !supplierUuid) {
        throw new BadRequestError('Missing Parameters')
    }

    $kue.create('supplier-notify-updated', { message, user, supplierUuid })
        .priority('critical')
        .attempts(3)
        .removeOnComplete(true)
        .save()

    console.log('created supplier update notification job')
    res.json('ok')
}

whole project here: https://github.com/AddToEvent/JobProcessor

Kue version: 0.11.6

I'm using docker images to launch my app

bahatron avatar Jun 14 '18 17:06 bahatron

const queue = kue.createQueue({ ... })

queue.setMaxListeners(1000) // <- golden method

queue.on('error', function (err) {
...

arboleya avatar Jun 30 '18 01:06 arboleya

Instead of blindly setting Max Listeners to 1000, you can do :

queue.setMaxListeners(queue.getMaxListeners() + 1);

whenever you add a processor to the queue.

If you are using Concurrency, Just add the concurrency value you are using instead of 1.

In your case, you can just do:

queue.setMaxListeners(queue.getMaxListeners() + Object.keys($jobs).length);

before the loop.

rohit-gohri avatar Jul 27 '18 05:07 rohit-gohri

Will do!. Thank you

bahatron avatar Jul 30 '18 09:07 bahatron

any other way to fix this?

sibelius avatar Jun 04 '19 16:06 sibelius

any other way to fix this?

@sibelius Could you provide a code sample with which you are getting this (after increaseing listeners with setMaxListeners)?

rohit-gohri avatar Jun 04 '19 16:06 rohit-gohri