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

Node memory usage with HTTP requests

本文关键字:用情 情况 内存 节点 请求 HTTP      更新时间:2023-09-26

有人能解释一下为什么下面的代码会导致节点的内存使用量激增而永远无法恢复吗?

我理解为什么它会导致内存使用率飙升,但它永远不会下降。

我正在做一些我认为不必要的事情(将变量设置为null),以引起垃圾收集,但这并没有什么区别。

我也尝试过使用--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++;
}

Node GC是"懒惰的",它倾向于将内存保留在他的"旧空间"中,直到达到硬限制(在64位env上约为1.4/1.5Gb)。在我们的情况下(大量http请求),内存越来越高,直到达到这个阈值,然后突然回到200Mb。

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

相关文章: