NodeJS V8 没有进行适当的垃圾收集

NodeJS V8 not doing proper garbage collecting

我有这个简单的 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 标志的服务器,并在我将值设为 null 之后放置 global.gc(),结果更好,但内存仍然保持在 50MB 以上。

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

您可以尝试启动一个不同的进程来故意吸收更多内存,然后再次查看原始 node.js 进程的垃圾收集是否表现得更积极。