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