HTTP请求的节点内存使用情况

时间:2015-02-05 06:46:48

标签: javascript node.js garbage-collection

有人可以解释为什么下面的代码导致节点的内存使用量爆炸并且永远无法恢复吗?

我理解为什么它会导致内存使用率上升,但它永远不会再回落。

我做的事情我不认为应该是必要的(将变量设置为null)以努力进行垃圾收集,但它并没有什么作用。< / p>

我也尝试过使用--expose-gcglobal.gc(),但它没有帮助。

我在某处错过了某个引用,还是有更大的问题?

var https = require("https")

var i = 0;
while(i < 200) {

  var req = https.request({
    host: 'host.com',
    path: '/endpoint',
    method: 'POST',
    headers: {
        'Content-Type': 'text/csv',
        'Authorization': 'Basic abc123'
    }
  }, function(res) { res.resume(); res=null; });
  req.data = "a,b,c";
  req.write(req.data);
  req.end();
  req = null;
  i++;
}

1 个答案:

答案 0 :(得分:0)

节点GC是&#34;懒惰&#34;它倾向于将记忆留在他的旧空间中#34;直到它达到和硬限制(64位环境下大约1.4 / 1.5Gb)。 在我们的情况下(许多http请求)内存越来越高,直到达到该阈值,然后被严重恢复到200Mb。

您可以使用--trace-gc--trace-gc-verbose来查看使用的内存类型。您可以设置--max-old-space-size以强制节点具有小于1.4Gb的限制,从而更频繁地触发GC(它可以影响perf,完整的GC是同步的并冻结线程)。