Tôi đang cố gắng hiểu cách hoạt động của GC trên node.js. Có vẻ như động cơ v8 không giải phóng bộ nhớ.Tại sao node.js không giải phóng bộ nhớ?
Tôi đã tạo một tập lệnh rất đơn giản, triển khai máy chủ http và tôi lưu mức sử dụng bộ nhớ vào luồng 3 giây một lần.
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);
Tôi đang sử dụng phiên bản cuối cùng của Node.js 0.10.33
Tôi đang sử dụng Gatling để gửi yêu cầu đến máy chủ http của tôi (15 yêu cầu/giây trong độ tuổi 30 sau đó 30 yêu cầu/giây trong 30 rồi 100 yêu cầu/giây trong độ tuổi 30)
các biểu đồ sau đây đại diện cho heapUsed
, heapTotal
và rss
do process.memoryUsage()
memory usage after 3 tests
Aft er những thử nghiệm, không có hoạt động trên máy chủ nhưng bộ nhớ không được phát hành, thậm chí sau hơn 1 giờ.
Ai đó có thể giải thích cho tôi nếu đó là hành vi chuẩn của bộ nhớ v8 của nếu có một rò rỉ bộ nhớ trong kịch bản của tôi không?
Cảm ơn sự giúp đỡ
bạn đã tìm thấy giải pháp cho điều này chưa? Tôi đang gặp phải sự cố tương tự ngay bây giờ. – ilse2005