当前位置: 首页 > 面试题库 >

NodeJS:如何调试“检测到的EventEmitter内存泄漏。添加了11位听众”

家弘业
2023-03-14
问题内容

我该如何调试我的应用程序并抛出此错误:

(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)

问题答案:

原来这是nodejs核心中的错误,我们在这里谈论这个问题:https
:
//github.com/joyent/node/issues/5108

错误的http服务器的解决方案抛出EventEmitter memory leak detected并填满了可用内存/可用CPU时间:

恢复为旧版本v0.8.23。(您可以从此处下载并安装/编译它:http
:
//blog.nodejs.org/2013/04/08/node-v0-8-23-legacy/)

2018年更新: 我看到了关于此主题的一些反馈,但问题似乎已经消失多年了。请注意,此响应 仅适用于使用nodejs泄漏的http服务器构建
。如果您处于其他情况,请在该线程上查看其他响应,并且不要降级您的版本(如该响应所建议),这样会浪费您的时间。



 类似资料:
  • 问题内容: 我收到以下警告: 我在server.js中编写了这样的代码: 如何解决呢? 问题答案: 这是在解释节点eventEmitter文档 这是哪个版本的Node?您还有什么其他代码?那不是正常行为。 简而言之,其:

  • 问题内容: 我知道这可能标记为重复的解决方案,但是堆栈溢出的解决方案对我来说不起作用。 问题: 我的代码库很大,有时我会遇到此错误,我不知道为什么会发生 我试过了 试图增加听众的限制,但不幸的是它没有用。 更新: 经过一番浏览后,我运行此命令来跟踪wanrning 原来是我的socket.io代码是我正在使用带redis的socket.io的问题 这是错误 这是代码(但是此代码用于更具体的任务,它

  • 我有一个这样的静态ExpressJS服务器: 当我启动服务器时,它使用20MB的v8堆。如果我每秒重新加载一个页面,则使用的堆会不断增长。4小时后,使用的v8堆将达到40MB。v8堆的总容量达到80MB,RSS(进程使用的总内存)达到130MB。 为什么这个简单而静态的服务器使用这么多内存?这似乎是内存泄漏。如果我不停止页面重新加载,使用的内存会继续增长。 如果像这样一个简单的静态服务器使用了太多

  • 问题内容: 我有一个在django中运行的小型多线程脚本,随着时间的流逝,它开始使用越来越多的内存。将其保留一整天会消耗大约6GB的RAM,我开始进行交换。 在http://www.lshift.net/blog/2008/11/14/tracing-python-memory- leaks 之后,我将其视为最常见的类型(仅使用800M内存): 这没有什么奇怪的。我现在应该怎么做才能帮助调试内存问

  • 问题内容: 是否有一些工具可以检测Node.js中的内存泄漏?并告诉我您在测试nodejs应用程序方面的经验。 问题答案: 以下工具对于发现内存泄漏很有用: 节点检查器 还有一个教程可以帮助您在此处查找内存泄漏: https://github.com/felixge/node-memory-leak- tutorial

  • 我在哪里可以找到libc_malloc_debug_leak。还有libc_malloc_debug_qemu。那么对于不同的Android版本(冰淇淋三明治、果冻豆、KitKat)和不同的设备(Galaxy Nexus、Nexus 7、Nexus 10)呢?