【问题标题】:NodeJS: calling global.gc() doesn't reduce memory to minimum?NodeJS:调用 global.gc() 不会将内存减少到最低限度?
【发布时间】: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


【解决方案1】:

在非常高的层次上,V8 将 GC 分为两部分。寻找要收集的垃圾,并实际收集垃圾。调用gc() 只做第二部分,收集已经找到的垃圾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-03
    • 2016-10-19
    • 1970-01-01
    • 2010-10-03
    • 1970-01-01
    • 2017-02-09
    相关资源
    最近更新 更多