2011-07-18 21 views
10

Node.js + Socket.ioを設定しようとしています。最後の懸念はメモリ使用量です。私たちはシンプルなサーバー(以下のコード)を起動しており、このプロセスの仮想メモリの使用量は〜600MBです。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]); 
       } 
     } 
    }); 
}); 

それは正常ですか?だから大きな仮想メモリの使用?

編集:

[OK]を、私はそれはかなり普通のことがわかりました。 http://comments.gmane.org/gmane.comp.lang.javascript.nodejs/17482

答えて

3

はい、非常に正常です。ノードはしばしばバッファをよく解放しません。 IIRC:v8から解放し、次にノードのヒープから解放し、最後にOSに戻す必要がありますが、ここでは非常に遅いものがあります。

ガベージコレクタを明示的に呼び出すことができるモジュールをダウンロードしてみてください。私はノードがv8にバッファーのサイズを報告していないと思うし、v8は小さいと仮定して、それらを解放しない。

+0

そのモジュールとその使用に関する情報はありますか? – diegoaguilar

関連する問題