GC'nin node.js.'de nasıl çalıştığını anlamaya çalışıyorum. V8 motoru hafızayı serbest bırakmıyor gibi görünüyor.Neden node.js belleği yayınlamıyor?
http sunucusu uygulayarak çok basit bir betik yaptım ve bellek kullanımını her 3 saniyede bir akışa kaydediyorum. Ben esnasında sonra 30 istekleri/sn 30s sırasında son benim http sunucusuna isteği göndermek için Gatling kullanıyorum node.js 0.10.33
sürümünü (15 istekleri/sn kullanıyorum
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);
30s daha sonra 100 istek 30s sırasında/sn)
aşağıdaki grafikler temsil heapUsed
, heapTotal
ve process.memoryUsage()
memory usage after 3 tests
Aft tarafından verilen rss
Bu testler, sunucuda hiçbir etkinlik yok, ancak 1 saatten fazla olsa bile bellek serbest kalmıyor. Benim komut bir bellek sızıntısı olup olmadığını ait v8 bellek standart davranışı ise
Biri bana açıklayabilir misiniz?
Bunun için bir çözüm buldunuz mu? Şu an benzer bir problemle karşılaşıyorum. – ilse2005