Node.js:较新版本中的严重内存泄漏错误?

时间:2013-04-21 17:23:25

标签: javascript node.js debugging memory memory-leaks

有什么问题?

首先,我在我的node.js模块或代码中遇到了问题,因为当我访问我的页面时,每次访问后内存都会减少,而且它没有被释放回来。经过几个小时的调试,我找不到任何问题,所以我尝试了默认的node.js服务器示例,看看问题是在我的代码中还是在node.js本身。

如何重复此问题:

所以我创建了这样的服务器:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(80);
console.log('Server running at port 80');

我访问mydomain.com并重复点击刷新,并且空闲内存一直在下降,即使在我释放刷新后,内存仍保持在同一级别,因此node.js会保留它。

那么这里有什么问题?

环境

我正在使用ubuntu 12max os x 10.8.3node v0.9.0node v0.10.0v0.10.2v0.10.4v0.11.1进行测试问题存在,并且node v0.8.21它正常工作,这就是为什么我说这可能是新版本中的错误。

1 个答案:

答案 0 :(得分:2)

需要时,

V8会调用 GC ,此时应减少内存使用量。

为确保 GC 进程正常运行,我建议您使用--expose-gc参数运行 node 并检查内存使用情况,如下所示:

var http = require('http'),
    util = require('util');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello World\n');

    global.gc();
    console.log('Memory Usage:');
    console.log(util.inspect(process.memoryUsage()));
}).listen(8080); // changed the port to 8080 because I didn't want to run the server as root

console.log('Server running at port 8080');