2016-06-11 66 views
2

我有这个简单的HTTP服务器V8的NodeJS没有做适当的垃圾收集

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以上。

回答

0

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

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