2011-07-18 18 views
10

Estamos intentando configurar Node.js + Socket.io. Nuestra última preocupación es el uso de la memoria. Estamos comenzando nuestro servidor simple (código a continuación) y el uso de memoria virtual de este proceso es ~ 600 mb.Alto uso de la memoria virtual de Node.js

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

Es normal? ¿Tan grande uso de memoria virtual?

Editar:

Bueno, he encontrado que es bastante normal. http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/17482

Respuesta

3

Sí, es muy normal. El nodo no suele liberar sus búferes bien. IIRC: Tienen que ser liberados de v8, luego del montón de nodos, y finalmente volver al sistema operativo, algo aquí es muy lento.

Intente descargar un módulo que le permita llamar al recolector de basura explícitamente. Sospecho que el nodo no informa el tamaño de los búferes a v8, y v8 está asumiendo que son pequeños y no los libera.

+0

¿Alguna información sobre ese módulo y usos? – diegoaguilar

Cuestiones relacionadas