我注意到以下节点js代码在运行时继续使用越来越多的内存。不确定何时/如果GC启动,但堆大小在短短3分钟内从7.7稳定增长到约8.5 MB。有人可以告诉我是否存在内存泄漏及其原因,以及如果代码无限期运行会导致问题吗?谢谢!
var events = require('events');
var eventEmitter = new events.EventEmitter();
var queue = [];
var count = 0;
function queueAdd(){
setTimeout(function (){
if(queue.length >= 1){
eventEmitter.emit('next');
return queueAdd();
};
count += 1;
queue.push(count.toString());
queueAdd();
},1000);
}
eventEmitter.on('next', function (){
console.log(queue.shift());
});
queueAdd();
答案 0 :(得分:0)
您发布的代码中没有泄漏。由于某种原因,nodejs可能没有压缩堆。您添加--trace-gc
以告知节点记录垃圾回收事件。您还可以使用--max-new-space-size=1024
来增加新分配可用的内存量,以强制更频繁的GC并帮助验证是否存在泄漏或只是偶尔进行压缩。