最近,我安装了https://github.com/lloyd/node-memwatch进行开发,以调查GC如何与我的程序进行交互。
我已将事件“stat”绑定,arthor声明该事件是在执行GC时触发的。
我发现当脚本负载很高时。不会触发“stat”事件。我不确定它是否意味着GC没有执行,但它表明GC可能没有触发。
在我的生产服务器中,全天的装载量甚至更高。我很确定GC没有机会表演。内存使用量没有机会减少。这就像内存泄漏一样。
我知道手动GC不是一个好主意(在node.js中有人反对手动GC的想法,但我找不到链接供参考),但我发现内存使用量不断增加。这真的需要解决。
答案 0 :(得分:3)
V8中有3种类型的GC事件
kGCTypeMarkSweepCompact
kGCTypeScavenge
kGCTypeAll
V8经常运行清除事件,但仅限于新创建的对象。在重载期间,其他类型的GC可能不经常发生。
您可以尝试运行使用NodeFly的nodefly-gcinfo module代理来跟踪正在进行的内存使用情况。
你也可以直接调用nodefly-gcinfo
,它有一个每次发生GC事件时都会运行的回调:
require('nodefly-gcinfo').onGC(function(usage, type, flags){
console.log("GC Event Occurred");
console.log("Heap After GC:",usage, type, flags);
});