Node.js   发布时间:2022-04-24  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了为什么node.js不释放内存?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解如何在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+';heap@R_441_10586@l;'+memUsage.heap@R_441_10586@l+';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个请求/秒)

以下图表表示process.memoryUsage()给出的heapUsed,heap@R_441_10586@l和RSS
memory usage after 3 tests

在那些测试之后,服务器上没有任何活动,但即使超过1小时,内存也不会被释放.

memory usage after 80min

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

谢谢您的帮助

解决方法

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

您需要强制GC运行.大多数其他运行时允许程序调用强制GC运行,但我不确定V8.

大佬总结

以上是大佬教程为你收集整理的为什么node.js不释放内存?全部内容,希望文章能够帮你解决为什么node.js不释放内存?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。