我正在尝试理解node.js上的垃圾回收机制。看起来v8引擎不会释放内存。
我编写了一个非常简单的脚本实现了一个HTTP服务器,并在每3秒保存一次内存使用情况到一个流中。
我编写了一个非常简单的脚本实现了一个HTTP服务器,并在每3秒保存一次内存使用情况到一个流中。
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 服务器发送请求(每秒 15 次请求,持续 30 秒,然后每秒 30 次请求,持续 30 秒,接着每秒 100 次请求,持续 30 秒)。
下面的图表表示由 process.memoryUsage()
给出的 heapUsed
、heapTotal
和 rss
:3 次测试后的内存使用情况
在这些测试之后,服务器上没有任何活动,但内存没有被释放,即使超过了 1 小时。
请问有人能够解释一下这是否是 v8 内存的标准行为,还是我的脚本存在内存泄漏?谢谢帮助。