内存泄漏,同时使用NodeJS

我想我只是缺less一些基本的东西。 我不明白如何分配内存。 如果我只是一次又一次地打这个函数,它就像疯了一样泄露(只是看着它在顶部增长)。 一般来说,我是nodejs和javascript的新手。 我似乎无法find任何解释为什么这是错的,但它是错误的。它是如何通过使用require语句内联调用handleMessage? 我也尝试设置一个variables等于require语句,只是访问该variables,但它仍然保持进食记忆。 任何事情都将是一个很大的帮助!

main.js:

var http = require('http'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); if (req.url == "/getRandom") { require('./getRandom.js').handleMessage(req,res) } else { res.end(req.url+'\n'); } }).listen(443); console.log('Server running at http://127.0.0.1:443/'); 

getRandom.js:

 var qs = require('querystring'); function getRandom() { var numbers = new Array() for (i = 0; i < 100; i++) { numbers[i] = Math.floor(Math.random()*100); } return numbers; } function handleMessage(req,res) { var body = ''; req.on('data', function (data) { body += data; }); req.on('end', function () { var t = JSON.parse(body); var c = t.name; var response = new Object(); response.numbers = getRandom(); res.end (JSON.stringify(response)); response.numbers = null; response = null; body=null; t=null; }); } module.exports.handleMessage = handleMessage; 

内存被分配给数组Array,但是在这里我没有看到任何内存泄漏。 垃圾收集器不必运行一旦有什么要求回。

为了说明我的观点,如果您将增加arrays的长度以帮助GC开始更快速地收集内存(还有一些小的调整)

 function getRandom() { var numbers = new Array() for (var i = 0; i < 100000; i++) { numbers[i] = Math.floor(Math.random()*100); } return numbers; } function handleMessage(req,res) { var body = ''; req.on('data', function (data) { body += data; }); req.on('end', function () { var response = new Object(); response.numbers = getRandom(); res.end (JSON.stringify(response)); response.numbers = null; response = null; }); } module.exports.handleMessage = handleMessage; 

内存将被释放得更快,所以它实际上将是显而易见的。

这是OSX上的Instruments的屏幕截图,运行上面提到的代码时,每秒执行60个请求到/ getRandom端点

在这里输入图像描述

最高输出中,显而易见的是RSIZ – (驻留内存大小)上升和下降(当内存分配,然后释放)