NodeJS:警告:检测到可能的EventEmitter内存泄漏。 添加了11位听众。 使用emitter.setMaxListeners()来增加限制

我有下面的代码:

var schild = spawn('script.sh', ["process1", "process2"]); schild.stderr.on('data', function (data) { logger.info('stderr: ' + data); }); schild.on('exit', function (code) { logger.info('child process exited with code ' + code); }); schild.stdout.on('data', function (data) { logger.info('Data ' + data); }); 

当我运行代码时,我得到下面的错误:

 (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace at EventEmitter.addListener (events.js:175:15) at EventEmitter.once (events.js:196:8) at Transport.logException (/x/home/prakash/src/node_modules/winston/lib/winston/transports/transport.js:118:8) at logAndWait (/x/home/prakash/src/node_modules/winston/lib/winston/logger.js:613:15) at async.forEach (/x/home/prakash/src/node_modules/winston/node_modules/async/lib/async.js:86:13) at Array.forEach (native) at _forEach (/x/home/prakash/src/node_modules/winston/node_modules/async/lib/async.js:26:24) at Object.async.forEach (/x/home/prakash/src/node_modules/winston/node_modules/async/lib/async.js:85:9) at Logger._uncaughtException (/x/home/prakash/src/node_modules/winston/lib/winston/logger.js:636:9) at process.EventEmitter.emit (events.js:126:20) (node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit. Trace at EventEmitter.addListener (events.js:175:15) at EventEmitter.once (events.js:196:8) at Transport.logException (/x/home/prakash/src/node_modules/winston/lib/winston/transports/transport.js:117:8) at logAndWait (/x/home/prakash/src/node_modules/winston/lib/winston/logger.js:613:15) at async.forEach (/x/home/prakash/src/node_modules/winston/node_modules/async/lib/async.js:86:13) at Array.forEach (native) at _forEach (/x/home/prakash/src/node_modules/winston/node_modules/async/lib/async.js:26:24) at Object.async.forEach (/x/home/prakash/src/node_modules/winston/node_modules/async/lib/async.js:85:9) at Logger._uncaughtException (/x/home/prakash/src/node_modules/winston/lib/winston/logger.js:636:9) at process.EventEmitter.emit (events.js:126:20) 

我相信问题是,当你不再需要的时候,你并没有移除听众。 当你完成它们的时候你需要使用' schild.removeListener('exit',function) '或' schild.removeAllListeners('exit') '。

请参阅: http : //nodejs.org/api/events.html#events_emitter_removelistener_event_listener

当然,在这种情况下,您需要有10多个侦听器,在这种情况下,您应该使用“ schild.setMaxListeners(0) ”(0表示无限制)

请参阅: http : //nodejs.org/api/events.html#events_emitter_setmaxlisteners_n

希望能帮助到你!