【发布时间】:2013-03-12 23:54:56
【问题描述】:
如何调试抛出此错误的应用程序:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at Socket.EventEmitter.addListener (events.js:160:15)
at Socket.Readable.on (_stream_readable.js:653:33)
at Socket.EventEmitter.once (events.js:179:8)
at TCP.onread (net.js:527:26)
我找不到假设的泄漏对象,用于将侦听器限制增加.setMaxListeners(0);
解决方案(来自 fardjad 和 jan salawa)
通过 jan salawa 的搜索,我找到了一个工作库 (longjohn),用于增加堆栈跟踪的详细程度。根据 fardjad 的回复,我发现我们必须对 EventEmitter.addListener AND EventEmitter.on 进行原型设计。
有了这个解决方案,我可以得到这个新的踪迹:
(node) warning: possible EventEmitter memory leak detected. 11 listeners added. Use emitter.setMaxListeners() to increase limit.
Trace
at EventEmitter.addListener.EventEmitter.on (xxx/main.js:44:15)
at Readable.on (_stream_readable.js:653:33)
at ServerResponse.assignSocket (http.js:1072:10)
at parser.onIncoming (http.js:1979:11)
at parserOnHeadersComplete (http.js:119:23)
at socket.ondata (http.js:1912:22)
at TCP.onread (net.js:510:27)
【问题讨论】:
-
查看有关 agent.maxSockets weblog.bocoup.com/node-stress-test-analysis 的信息。也许这是一个原因。
-
试过没有成功。我将
require("http").globalAgent.maxSockets = Infinity;放在我的main.js 中,但没有任何改变... :( 我还尝试了ulimit -n 999999命令来限制打开文件,-–nouse-idle-notification用于暂停实时垃圾收集器... -
当我按下 control + C 其他处理开始时,这完全挂起我的节点 js 服务器,就像在本地运行时出现的异常一样。我试过设置 maxListeners 没用,这是说我有太多人连接到同一个听众还是说我有太多事件
标签: node.js memory-leaks eventemitter