【问题标题】:NodeJS V8 not doing proper garbage collectingNodeJS V8 没有进行正确的垃圾收集
【发布时间】:2016-10-12 10:10:25
【问题描述】:

我有这个简单的 http 服务器

var http = require('http');

var server = http.createServer(function(request, response) {

    var data = [];
    for ( var i=0; i < 1000000; i++ ) {
        data.push({});
    }

    response.end('Done');

});

server.listen(3000);

当我启动服务器时,该进程使用了​​大约 8MB 的内存。 当我向服务器发出请求时,内存使用量上升到 100MB 以上,并且一直保持这种状态。然后我按住 F5 几秒钟来发送一些请求,并且内存使用量在某些时候增长到 400MB 以上。处理完所有请求后,服务器仍在使用 100MB 以上的空间。

当我提出另一个请求时,内存有时会超过或接近 200MB 或保持大致相同。我让服务器运行了一段时间,内存没有释放。

我尝试输入date = null,结果是一样的。然后我尝试使用--expose-gc 标志运行服务器,并在我将值设为空后将global.gc() 放入,结果更好,但内存仍保持在50MB 以上。

【问题讨论】:

    标签: node.js memory-leaks garbage-collection v8


    【解决方案1】:

    如果您的系统有大量可用内存,则不太可能有任何情况触发垃圾收集的需求。如果您可以将内存使用量提高到最大点并继续为请求提供服务,那么显然垃圾收集正在工作,因为在分配更多内存之前需要释放内存。

    您可以尝试启动不同的进程以故意占用更多内存,然后再查看原始 node.js 进程的垃圾收集是否表现得更激进。

    【讨论】:

      猜你喜欢
      • 2015-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多