为什么node.js不释放内存?

我想了解如何在node.js上工作GC。 看来比v8引擎不释放内存。

我做了一个非常简单的脚本实现一个HTTP服务器,我保存每3秒的stream内存使用量。

var http = require('http'), fs = require('fs'), heapdump = require('heapdump'), memwatch = require('memwatch'); http.createServer(function (req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); }).listen(8888); console.log('Server running on port 8888.'); memwatch.on('leak', function(info) { // look at info to find out about what might be leaking console.log('============= MEMWATCH ON LEAK ============\n',info) }); memwatch.on('stats', function(stats) { // do something with post-gc memory usage stats console.log('============= MEMWATCH STATS ============\n', stats) }); var myStream = fs.createWriteStream('/tmp/logmem.log'); setInterval( function() { var t = new Date().getTime(); var memUsage = process.memoryUsage(); var str = t+';heapUsed;'+memUsage.heapUsed+';0;0;0\n'+ t+';heapTotal;'+memUsage.heapTotal+';0;0;0\n'+ t+';rss;'+memUsage.rss+';0;0;0\n'; myStream.write( str ); }, 3000 ); 

我正在使用最新版本的node.js 0.10.33

我正在使用Gatling向我的http服务器发送请求(30秒内15次请求/秒,30次请求/秒,30次请求/秒,30次请求/秒)

下面的图表代表3次testing之后由process.memoryUsage()给出的heapUsedheapTotalrss

经过这些testing后,服务器上没有任何活动,但内存不会被释放,即使超过1小时。

内存使用80分钟后

如果是我的脚本中有内存泄漏的v8内存的标准行为,有人可以解释我吗?

谢谢您的帮助

我的猜测是你没有超过主要集合执行的内存使用量。 这是不够的,“旧空间”被转换为“新空间”( http://jayconrod.com/posts/55/a-tour-of-v8-garbage-collection )。

您需要强制GC运行。 大多数其他运行时允许编程调用来强制GC运行,但我不知道有关V8。