Ich versuche zu verstehen, wie funktioniert der GC auf node.js. Es scheint, als würde die V8-Engine den Speicher nicht freigeben.Warum node.js Speicher nicht freigibt?
Ich machte ein sehr einfaches Skript, das einen HTTP-Server implementiert, und ich speichere die Speicherauslastung alle 3 Sekunden in einen Stream.
var http = require('http'),
fs = require('fs'),
heapdump = require('heapdump'),
memwatch = require('memwatch');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8888);
console.log('Server running on port 8888.');
memwatch.on('leak', function(info) {
// look at info to find out about what might be leaking
console.log('============= MEMWATCH ON LEAK ============\n',info)
});
memwatch.on('stats', function(stats) {
// do something with post-gc memory usage stats
console.log('============= MEMWATCH STATS ============\n', stats)
});
var myStream = fs.createWriteStream('/tmp/logmem.log');
setInterval(function() {
var t = new Date().getTime();
var memUsage = process.memoryUsage();
var str = t+';heapUsed;'+memUsage.heapUsed+';0;0;0\n'+
t+';heapTotal;'+memUsage.heapTotal+';0;0;0\n'+
t+';rss;'+memUsage.rss+';0;0;0\n';
myStream.write(str);
}, 3000);
Ich bin die letzte Version von node.js 0.10.33
ich mit Gatling bin mit Anfrage per http-Server senden (15 Anfragen/s während der 30er Jahre dann 30 Anfragen/s während 30s dann 100 Anfragen/sec während 30s)
die folgenden Tabellen stellen die heapUsed
, heapTotal
und rss
gegeben durch process.memoryUsage()
memory usage after 3 tests
Aft Bei diesen Tests gibt es keine Aktivität auf dem Server, aber der Speicher wird nicht freigegeben, selbst nach mehr als 1 Stunde.
Kann jemand mir erklären, wenn es das Standardverhalten des v8 Erinnerung ist, wenn es ein Speicherleck in meinem Skript ist?
Danke für die Hilfe
Haben Sie eine Lösung dafür gefunden? Ich habe gerade ein ähnliches Problem. – ilse2005