nodejs Ve basit bir soket uygulaması (sadece bağlayın ve bağlantıyı kesmek) için socket.io kullanarak kod yazdım, yaklaşık 50 kullanıcı belleği kullanımı için çok değişmez, ama 300'e kadar kullanıcı ve bir saat sonra, bellek kullanımı sadece büyür (server.js proccess için yaklaşık 300MB ve zaman geçtikçe büyür), node'lerin belleğini serbest bırakmaması gibi görünüyor.nodejs, socket.io basit kod bellek sızıntısı
var server = require('http').createServer();
var io = require('socket.io')(server);
var port = 9090;
var sockets = {};
server.listen(port, function() {
console.log('Server listening at port ', port);
//timer and logs are not problem , i tested it before.
setInterval(function(){
console.log(Object.keys(sockets).length+' Online Devices At '+Date());
}, 1000 * 60 * 1);
});
io.on('connection',function(socket){
sockets[socket.id]={id:socket.id};
console.log('connected '+socket.id + ' count ' + Object.keys(sockets).length);
socket.on('disconnect', function (data) {
delete sockets[socket.id];
console.log('disconnected '+socket.id+ ' count ' +Object.keys(sockets).length);
});
});
Bazı şeyleri yanlış yapıyorum?
Düzenleme
14 saat forever
300 açık yuva ile Ve nodejs proccess ilgilidir bellek kullanımı 500MB Hakkında dosyasını başlattıktan sonra.
Düzenleme
16 sonra Saat, süreç durdu sonra 300 Bağlı Yuva. Yeni kodu
Düzenleme
yağma ediniz. 100MB, 5 dakika 1000 stabil açık bağlantı sonrası: 400MB
var server = require('http').createServer();
var io = require('socket.io')(server);
var port = 90;
var counter = 0;
var clients = {}
server.listen(port, function() {
console.log('Server listening at port ', port);
});
io.on("connection",function(socket){
clients[socket.id] = socket;
counter++;
socket.on('disconnect', function (data) {
counter--;
delete clients[socket.id];
});
});
i 1000 Bağlı kullanıcı ile bu çalışıyorum başlangıç öncesinde
bellek kullanımı (başka sunucu benzetmek kullanıcı istekleri ve açık prizler olan)
Yuva nesnesi zaten bağlı soketlerin bir listesi olduğunda bir sayacı el ile ne koruyor? Bunun sorulan soruyla ne ilgisi var? – jfriend00
@galactocalypse, ilk cevabınız için teşekkürler, ama önerilen bellek sızıntısı neredeyse paylaştığınız kodun bir parçası değil. . “Soketleri saymakla ilgili” biliyorum bunu! ama problemin değişkenleri veya dizi öğelerini göstermeyle ilgili olduğunu göstermeye çalıştım. – Mojtabye
@ jfriend00: Bu noktanın başlangıcında, 'Bu, ana sorunuza uygun değil' demişti. Object.keys() O (n) 'de çalışır ve 300 fazla değilken, O (1) kesinlikle daha yüksek bir ölçekte tercih edilir. @ ALU0075: Burada bir yığın çöp toplamanızı ve burada önerildiği gibi bulduğunuz şeyi paylaşmanızı öneriyorum: http://jpallen.net/2013/03/08/tracking-down-a-memory-leak-in-node-js -ve-socket-io/'Ayrıca kullandığınız düğüm ve yuva sürümlerini de paylaşın. – galactocalypse