node.js垃圾收集的时间

时间:2012-07-12 08:53:12

标签: node.js garbage-collection

最近,我安装了https://github.com/lloyd/node-memwatch进行开发,以调查GC如何与我的程序进行交互。

我已将事件“stat”绑定,arthor声明该事件是在执行GC时触发的。

我发现当脚本负载很高时。不会触发“stat”事件。我不确定它是否意味着GC没有执行,但它表明GC可能没有触发。

在我的生产服务器中,全天的装载量甚至更高。我很确定GC没有机会表演。内存使用量没有机会减少。这就像内存泄漏一样。

  1. 我的观察是否正确?当连续高负荷时GC无法执行吗?
  2. 如果是这样,我应该使用暴露的GC接口来强制GC吗?
  3. GC堵塞了吗?我应该更频繁地执行GC,以便GC不会长时间阻塞每个GC吗?
  4. 我知道手动GC不是一个好主意(在node.js中有人反对手动GC的想法,但我找不到链接供参考),但我发现内存使用量不断增加。这真的需要解决。

1 个答案:

答案 0 :(得分:3)

V8中有3种类型的GC事件

  • kGCTypeMarkSweepCompact
  • kGCTypeScavenge
  • kGCTypeAll

V8经常运行清除事件,但仅限于新创建的对象。在重载期间,其他类型的GC可能不经常发生。

您可以尝试运行使用NodeFlynodefly-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);
});