2016-06-11 61 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進程的垃圾回收似乎表現得更加積極。