2011-07-18 3 views
10

Nous essayons de configurer Node.js + Socket.io. Notre dernière préoccupation est l'utilisation de la mémoire. Nous commençons notre serveur simple (code ci-dessous) et l'utilisation de mémoire virtuelle de ce processus est ~ 600 mb.Node.js haute utilisation de la mémoire virtuelle

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]); 
       } 
     } 
    }); 
}); 

Il est normal? Si grande utilisation de la mémoire virtuelle?

Edit:

Ok, je trouve qu'il est assez normal. http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/17482

Répondre

3

Oui, c'est très normal. Node ne libère pas souvent ses tampons. IIRC: Ils doivent être libérés de la v8, puis du tas de nœuds, puis finalement de l'OS, quelque chose ici est très lent.

Essayez de télécharger un module qui vous permet d'appeler le garbage collector explicitement. Je soupçonne que le noeud ne rapporte pas la taille des buffers à v8, et v8 suppose qu'ils sont minuscules et ne les libère pas.

+0

Des informations sur ce module et les utilisations? – diegoaguilar