在Node.js中使用流时发生内存泄漏?

高洛·罗登(Golo Roden)

假设我有一个简单的http服务器,例如:

var http = require('http');

http.createServer(function (req, res) {
  req.on('data', function (data) {
    console.log('Got some data: ' + data);
  });

  req.on('end', function () {
    console.log('Request ended!');
  });

  res.end('Hello world!');
}).listen(3000);

因此,基本上是默认的101示例,到目前为止没有什么特别的-除了我订阅了可读dataend事件req现在我想知道当我不再需要这些事件时是否必须取消订阅这些事件?

还是在可读流结束时自动清除它们?

这样的代码会导致内存泄漏吗?

洛朗·佩林

(此答案包含指向node.js源代码的相关部分的链接)

在回答您的问题之前,让我们谈谈事件。执行此操作时:

emitter.on('an-event', listener);

listener被添加到附加到的列表emitter稍后,当emitter触发事件时,它将通过遍历列表来通知所有订阅该事件的侦听器。node.js事件发射器的神奇之处在于,您不必自己声明或管理该列表。

但是,无论何时调用.on(),都将创建向后引用发射器->侦听器。此参考将防止GC收集侦听器,并且如果您永不退订,则会创建“泄漏”。

对于node.js,这种情况并不经常发生,因为通常,发射器会在侦听器之前被破坏,但是在现实情况中,这种情况是当您具有长时间运行的连接(例如Twitter Streaming API)时,有时会重新连接。如果不注销事件,则可能会从旧连接中获取事件,并认为它们适用于新连接。这可能会导致您认为新连接已关闭。

当它认为您可能忘记注销注册侦听器时,node.js将显示臭名昭著的“检测到可能的泄漏”消息。

回到您的示例:

因为不会先泄漏套接字(req + res),所以不会造成泄漏。由于它是发射器,所以node.js将强制删除所有侦听器

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

PM2-不正确的内存使用情况读取以及Node.js应用程序可能发生的内存泄漏

来自分类Dev

node.js readFile内存泄漏

来自分类Dev

Node JS forEach 内存泄漏问题

来自分类Dev

在IOS中使用Web服务时,发生NSURLSession内存泄漏

来自分类Dev

在glib中使用垃圾回收时发生内存泄漏

来自分类Dev

在python中使用pickle时发生内存泄漏

来自分类Dev

在Node.js中使用“大”数据启动Webworker时快速增加内存

来自分类Dev

在Node.js中使用“大”数据启动Webworker时快速增加内存

来自分类Dev

当更新计数器时,Cassandra Node.js驱动程序内存泄漏

来自分类Dev

Node.js(express.js)中的内存泄漏

来自分类Dev

Java内存“泄漏”与ConcurrentLinkedQueue $ Node

来自分类Dev

使用forEach时,与node.js异步流混淆。

来自分类Dev

node.js-需求错误导致内存泄漏?

来自分类Dev

Node.js网络套接字内存泄漏?

来自分类Dev

node.js-需求错误会导致内存泄漏?

来自分类Dev

在sequelize(node.js express)的include中使用models.sequelize.col()时发生模棱两可的错误

来自分类Dev

在sequelize(node.js express)的include中使用models.sequelize.col()时发生模棱两可的错误

来自分类Dev

使用NodeJS时发生内存泄漏

来自分类Dev

使用实体框架时发生内存泄漏

来自分类Dev

使用MBProgressHUD时发生内存泄漏

来自分类Dev

循环使用NSReadPixel时发生内存泄漏

来自分类Dev

使用DnsGetCacheDataTable时发生内存泄漏

来自分类Dev

在node.js中的流中发生什么顺序的事情

来自分类Dev

在动态软件包库中使用TTask时发生内存泄漏

来自分类Dev

Node js,将pdfkit传递到内存流

来自分类Dev

在Node.js中使用findAndModify时出错

来自分类Dev

在setinterval中使用长间隔时,Node.js崩溃

来自分类Dev

在Node.js中使用集群时出错

来自分类Dev

在 node.js 中使用图像水印时出错

Related 相关文章

  1. 1

    PM2-不正确的内存使用情况读取以及Node.js应用程序可能发生的内存泄漏

  2. 2

    node.js readFile内存泄漏

  3. 3

    Node JS forEach 内存泄漏问题

  4. 4

    在IOS中使用Web服务时,发生NSURLSession内存泄漏

  5. 5

    在glib中使用垃圾回收时发生内存泄漏

  6. 6

    在python中使用pickle时发生内存泄漏

  7. 7

    在Node.js中使用“大”数据启动Webworker时快速增加内存

  8. 8

    在Node.js中使用“大”数据启动Webworker时快速增加内存

  9. 9

    当更新计数器时,Cassandra Node.js驱动程序内存泄漏

  10. 10

    Node.js(express.js)中的内存泄漏

  11. 11

    Java内存“泄漏”与ConcurrentLinkedQueue $ Node

  12. 12

    使用forEach时,与node.js异步流混淆。

  13. 13

    node.js-需求错误导致内存泄漏?

  14. 14

    Node.js网络套接字内存泄漏?

  15. 15

    node.js-需求错误会导致内存泄漏?

  16. 16

    在sequelize(node.js express)的include中使用models.sequelize.col()时发生模棱两可的错误

  17. 17

    在sequelize(node.js express)的include中使用models.sequelize.col()时发生模棱两可的错误

  18. 18

    使用NodeJS时发生内存泄漏

  19. 19

    使用实体框架时发生内存泄漏

  20. 20

    使用MBProgressHUD时发生内存泄漏

  21. 21

    循环使用NSReadPixel时发生内存泄漏

  22. 22

    使用DnsGetCacheDataTable时发生内存泄漏

  23. 23

    在node.js中的流中发生什么顺序的事情

  24. 24

    在动态软件包库中使用TTask时发生内存泄漏

  25. 25

    Node js,将pdfkit传递到内存流

  26. 26

    在Node.js中使用findAndModify时出错

  27. 27

    在setinterval中使用长间隔时,Node.js崩溃

  28. 28

    在Node.js中使用集群时出错

  29. 29

    在 node.js 中使用图像水印时出错

热门标签

归档