NodeJS V8没有做正确的垃圾收集

时间:2016-06-11 15:08:39

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

我有这个简单的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以上。

1 个答案:

答案 0 :(得分:0)

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

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