2016-06-11 6 views
2

Ich habe diesen einfachen HTTP-ServerNodeJS V8 tut richtigen Müll nicht sammeln

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); 

Wenn ich den Server der Prozess verbraucht rund 8 MB Speicher starten. Wenn ich eine Anfrage an den Server stelle, steigt die Speicherauslastung auf über 100 MB und es bleibt einfach so. Dann halte ich F5 für ein paar Sekunden, um einige Anfragen zu spammen, und die Speicherauslastung wächst an manchen Punkten über 400 MB. Wenn alle Anfragen bearbeitet werden, verwendet der Server immer noch über 100 MB.

Wenn ich eine weitere Anfrage mache, geht der Speicher manchmal über oder nahe 200MB oder bleibt ungefähr gleich. Ich lasse den Server eine Weile laufen und der Speicher wird nicht freigegeben.

Ich versuchte setzen und das Ergebnis war das gleiche. Dann habe ich versucht, den Server mit dem --expose-gc Flag laufen zu lassen und global.gc() setzen, nachdem ich den Wert null und die Ergebnisse sind besser, aber der Speicher bleibt immer noch über 50MB.

Antwort

0

Wenn auf Ihrem System genügend Speicher verfügbar ist, ist es unwahrscheinlich, dass eine Bedingung die Speicherbereinigung erforderlich macht. Wenn Sie die Speicherbelegung bis zu einem Höchstpunkt hochfahren und weiterhin Anforderungen bedienen können, funktioniert die Speicherbereinigung eindeutig, da der Speicher freigegeben werden muss, bevor weitere Speicherbereiche zugewiesen werden.

Sie können versuchen, einen anderen Prozess starten, um absichtlich mehr Speicher aufzusaugen, dann schauen Sie erneut, ob der ursprüngliche node.js Prozess 'Garbage Collection scheint sich aggressiver zu verhalten.