Sto cercando di capire come funziona il GC su node.js. Sembra che il motore V8 non rilasci la memoria.Perché node.js non rilascia memoria?
Ho realizzato uno script molto semplice implementando un server http e ho salvato l'utilizzo della memoria in un flusso ogni 3 secondi.
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);
Sto utilizzando l'ultima versione di node.js 0.10.33
che sto usando Gatling di inviare richiesta al mio server http (15 richieste/sec durante 30s poi 30 richieste/sec durante 30s poi 100 richieste/sec durante 30s)
le seguenti tabelle illustrano il heapUsed
, heapTotal
e rss
in process.memoryUsage()
memory usage after 3 tests
poppa er tali test, non c'è attività sul server ma la memoria non viene rilasciata, anche dopo più di 1 ora.
Qualcuno mi può spiegare se è il comportamento standard della memoria v8 di se v'è una perdita di memoria nel mio script?
Grazie per l'aiuto
hai trovato una soluzione per questo? Ho di fronte un problema simile in questo momento. – ilse2005