3

给定以下代码片段:

var request = require('request');
function getGoogle() {

  request('http://www.google.com', function (error, response, body) {
      if (!error && response.statusCode == 200) {
      //console.log(body) // Print the google web page.
      }
  });
}
setInterval(getGoogle, 1000);

使用 Node 版本 0.10.17,此代码泄漏。任何想法为什么?

4

2 回答 2

2

我看到很多问题,人们会问“我的天哪的内存泄漏!” 基于应用程序运行的前几分钟,无需等待进程是否达到上限或实际内存不足。Node 只是使用尽可能多的内存。

请参阅以下粗略基准。我运行了您的代码(改为超时 100),内存使用量迅速增加到约 70 MB,但随后停止。第一列是内存使用情况。

27368  0:00.36 node test.js
40644  0:00.82 node test.js
47468  0:01.21 node test.js
48192  0:01.40 node test.js
67952  0:02.39 node test.js
69448  0:03.29 node test.js # Increasing fast til around here
70016  0:04.46 node test.js
70624  0:07.43 node test.js
70944  0:10.59 node test.js
71612  0:13.63 node test.js
73120  0:16.83 node test.js
70864  0:18.17 node test.js # Look it's decreasing
67780  0:42.27 node test.js # Considerably later it's even lower!

我猜测为什么会这样是因为垃圾收集很昂贵,但我不确定,如果有人有真正的解释和参考,我会很高兴。

于 2013-08-25T10:08:12.980 回答
1

在这个页面(http://www.joyent.com/blog/walmart-node-js-memory-leak)中,他们实际上在 Node.JS 的 http 堆栈中发现了内存泄漏

好消息是它已在 Node.JS 版本 v0.10.22 中修复

于 2013-12-11T16:27:25.117 回答