【问题标题】:Node.js fs.watchFile error EventEmitter memory leak detectedNode.js fs.watchFile 错误 EventEmitter 检测到内存泄漏
【发布时间】:2013-07-31 17:45:41
【问题描述】:
 (node) warning: possible EventEmitter memory leak detected. 11 listeners added.
 Use emitter.setMaxListeners() to increase limit.
 Trace:
     at StatWatcher.<anonymous> (events.js:139:15)
     at Object.watchFile (fs.js:762:8)
     at /home/gotimeco/gtnode2.js:79:11
     at Object.oncomplete (path.js:406:19)

我正在使用 node.js v0.10.13。有什么想法吗?

【问题讨论】:

  • 你能分享(sn-p of)促成这个的代码吗?
  • 您好@JonathanLonowski 快速回复,fs.watchFile( socket.logfile,{persistent:true}, function ( event, filename ) { //console.log(socket.logfile+' changed') fs.readFile(socket.logfile,'utf-8',function ( err, data ) { if ( err ){ io.sockets.socket(socket.id).emit("forceDisconnect"); fs.unwatchFile(socket.logfile); socket.disconnect(); }else{ //console.log(data) io.sockets.socket(socket.id).emit("message",data); } }); });// fs.watch

标签: node.js fs


【解决方案1】:

请确保 fs.watchFile 不会在同一个文件上多次调用。

说明: fs 模块包含一个本地对象“statWatchers”{},用于跟踪正在监视的文件。

因此,当调用 fs.watchFile('fileX') 时,如果没有退出,则会创建一个新的 statWatcher 对象,并将其存储在文件名的“statWatchers”对象中。 如果已经有一个 statWatcher 对象与此文件关联,则返回它。

statWatcher["fileX"] = new statWatcher();

然后在与此文件关联的 statWatcher 对象上调用 addListener('change', listener)。

如果 fs.watchFile 在 "fileX" 上被调用 11 次,这将导致在 statWatcher 上为事件 "change" 调用 addListener 11 次。

如果尝试为同一事件添加超过 11 个侦听器,EventEmitter 会引发错误。

希望答案能解决您的问题。

【讨论】:

  • 嗨@Chandu,感谢您的完整解释。我使用 watchFile 检查登录用户的日志文件,当用户打开超过 10 个浏览器窗口时可能会触发该错误。我尝试改用 fs.watch 并为每个听众应用 fs.unwatch 。到目前为止,没有抛出任何错误。 :) 顺便说一句,我已经调试了我的项目好几个星期了,它在一段时间后挂断了,它说它正在运行这里链接:stackoverflow.com/questions/17926464/…
猜你喜欢
  • 2021-07-17
  • 2018-08-13
  • 1970-01-01
  • 1970-01-01
  • 2022-10-14
  • 2020-02-27
  • 2021-09-05
相关资源
最近更新 更多