【问题标题】:Nodejs writestream memory usageNodejs writestream 内存使用情况
【发布时间】:2015-05-16 12:10:39
【问题描述】:

看看这个示例代码,它在 nodejs 中复制了一个文件。

var fs = require('fs');
var out = fs.createWriteStream('1_GB_FILE_COPY');
var inp = fs.createReadStream('1_GB_FILE');
inp.pipe(out);
inp.on('end', function() {
  console.log("end");
})
process.stdin.on('data', function() {});//just to keep process alive after copy

一切都好,这段代码可以正常工作,并且副本已制作完成。 Nodejs 在复制过程中使用了大约 140MB 的内存。但是在复制完成后,它永远不会释放这个内存。这是正常的吗?为什么节点保留此内存?有什么办法可以强制它冲洗吗?

【问题讨论】:

  • 你怎么知道内存没有被释放?
  • 来自系统监视器!即使在复制完成后,它也会使用 140mb 的内存。

标签: javascript node.js stream


【解决方案1】:

系统监视器让您无法准确了解节点应用程序实际使用的内存类型。操作系统如何为进程分配内存与节点如何管理自己的内存之间存在很大差异。您可以使用 chrome 开发工具来获得更好的外观。我在内存快照前后运行了你的代码,比较了两者,发现如下:

简而言之,您绝对不会像您想象的那样泄漏 140MB。要亲眼看看,这里有一个很好的指南:

https://github.com/felixge/node-memory-leak-tutorial

【讨论】:

  • 感谢您的回答!假设在极端情况下,我们只有 140MB 的可用内存,nodejs 得到它,完成了工作,正如你所说,它释放了它,操作系统是否认为这是内存再次空闲或者它没有任何可用内存有吗?
猜你喜欢
  • 2021-02-11
  • 1970-01-01
  • 1970-01-01
  • 2013-05-30
  • 1970-01-01
  • 2015-02-03
  • 2012-05-30
  • 2021-02-26
  • 2010-10-24
相关资源
最近更新 更多