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

 YANLIUPING 发布于 2022-12-13 22:57

我试图了解如何在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内存的标准行为?

谢谢您的帮助

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有