【发布时间】:2015-11-17 15:16:06
【问题描述】:
为了调查内存泄漏,我设置了一个在每个POST /gc 触发global.gc() 的路由
app.post('/gc', function(req, res){
global.gc();
});
但是,我注意到,如果我向这个请求发送垃圾邮件,它会越来越多地减少内存使用量。不应该调用global.gc()一次足以将内存减少到最小?
如果是这样,为什么连续多次调用每次调用都会减少内存?
(我使用的是 Node.js v0.12)
【问题讨论】:
-
您如何(以及何时)测量内存消耗?
-
@Bergi 应用程序连接到 PM2,我使用
pm2 monit实时测量内存。我等待内存爬得很高(1G)。然后我发送global.gc()信号几次。每次它会减少大约 30-200Mb 的内存,直到达到绝对最小值 ~80Mb。因此,大约需要 10 次调用才能进行完整的垃圾回收,这与它应该做的事情相矛盾(一次完整的垃圾回收)。 -
这是由于 v8 gc 的工作方式(扫一扫)查看这篇关于 gc 的精彩文章jayconrod.com/posts/55/a-tour-of-v8-garbage-collection
标签: javascript node.js memory-leaks garbage-collection v8