2011-07-18 33 views
10

Node.js + Socket.io dosyasını kurmaya çalışıyoruz. Son endişemiz hafıza kullanımı. Basit sunucumuza (aşağıdaki kod) başlıyoruz ve bu işlemin sanal bellek kullanımı ~ 600 mb.Node.js yüksek sanal bellek kullanımı

1000  6463 0.0 0.4 635816 19260 pts/1 Sl+ 12:51 0:00 node /home/data/server.js 

server.js:

var express = require('express'); 
var app = express.createServer(), io = require('socket.io').listen(app); 

app.listen(8000); 

io.set('flash policy port', 8001); 
io.enable('browser client minification'); // send minified client 
io.enable('browser client etag');   // apply etag caching logic based on version number 
io.set('log level', 1); 
io.set('transports', [ 
    'websocket' 
    , 'flashsocket' 
    , 'htmlfile' 
    , 'xhr-polling' 
    , 'jsonp-polling' 
    ]); 

io.sockets.on('connection', function (socket) { 
    socket.on('distribute', function (data) { 
     if(typeof data.key == 'undefined' || (typeof data.key != 'undefined' && data.key != 'randomstringforsecurityreason')){ 
       return false; 
     } 
     delete data.key; 
     socket.broadcast.to(data.channel).emit('eat', data); 
    }); 

    socket.on('pukpuk', function(data) { 
     if(typeof data == "string"){ 
       socket.join(data); 
     } else { 
       for(var i in data) 
       { 
        socket.join(data[i]); 
       } 
     } 
    }); 
}); 

normaldir? Yani büyük sanal bellek kullanımı?

Düzenleme:

Tamam, bu oldukça normal olduğunu gördük. http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/17482

cevap

3

Evet, bu çok normal. Düğüm, genellikle arabelleklerini serbest bırakmaz. IIRC: V8'den serbest bırakılmalılar, sonra düğümün yığınından, sonra tekrar OS'ye geri gönderilmeli, burada bir şey çok yavaş.

Çöp toplayıcısını açıkça aramanızı sağlayan bir modül indirmeyi deneyin. Düğümün arabellek boyutunu v8 ile bildirmediğinden şüpheleniyorum ve v8 onların küçümsediklerini ve onları özgürleştirmediklerini varsayıyor.

+0

Bu modüldeki herhangi bir bilgi ve kullanır? – diegoaguilar