我试图了解如何在node.js上运行GC.似乎比v8引擎不释放内存.
我制作了一个非常简单的脚本,实现了一个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服务器发送请求(30秒内15个请求/秒,30秒内30个请求/秒,30秒内100个请求/秒)
下面的图表表示heapUsed
,heapTotal
并且rss
由下式给出process.memoryUsage()
后3次测试的内存使用情况
在那些测试之后,服务器上没有任何活动,但即使超过1小时,内存也不会被释放.
80分钟后的内存使用情况
如果我的脚本中存在内存泄漏,是否有人可以解释我是否是v8内存的标准行为?
谢谢您的帮助