2016-05-03 21 views
0

私の会社はいくつかの問題で苦労しています。 node.exeがメモリとCPUを使いすぎています。iisnode node.js socket.io予期しないメモリリーク

サーバは、次のようになります。

var userList = []; 

/* NODE.JS */ 
var server = require('http').createServer(function (req, res) { 
    res.writeHead(200); 
    res.end('ok'); 
}).listen((process.env.PORT || 88)); 

/* SOCKET.IO */ 
//var io = require('socket.io')(server); 
var io = require('socket.io')(server); 

io.on('connection', function (socket) { 
    socket.on('connectUser', function (user) { 
     if (!isAuthenticated(user.user, user.pass)) { 
      socket.disconnect(socket.conn.id); 
     } else { 
      //Session des Users 
      user.session = socket.conn.id; 
      //if (userList.indexOf(user)== -1) 
      userList.push(user); 
      io.emit('userOnline', {onlineUser: userList}); 
     } 
    }); 

    socket.on('sendMessageToUser', function (sendObj) { 
      if(sendObj && sendObj.to) { 
       var userArr = userList.filter(function(val, index, arr) { 
        if(sendObj.to.indexOf(val.id) > -1) 
         return val; 
       }); 

       userArr.forEach(function(user) { 
        socket.to(user.session).emit('getMessageFromUser', sendObj); 
       }); 
      } 
    }); 

    socket.on('disconnect', function() { 
     userList = userList.filter(function(val, index, arr) { 
      if(val.session !== socket.conn.id) 
       return val; 
     }); 

     io.emit('userOnline', {onlineUser: userList}); 
    }); 
}); 

function isAuthenticated(user, pass) { 
    return true; 
} 

ユーザーが接続する(各ページの訪問は)サーバーへの接続になりますとき。 userListには、そのユーザーに関する情報が入力されます。ページを離れるかリフレッシュすると、ユーザーはそのオブジェクトから削除されます。

サーバーは、別のnode.jsアプリケーションもホストします。私のスクリプトを起動した後、もう一方のアプリケーションはメモリとCPUにも上昇しています!

誰でもこれがバグであることを確認できますか?あるいは、私は2つのアプリケーションを別々に扱わなければならないのですか?

は、私のサーバーは、次のようになります。 iisnode(V 0.2.18.0) ノード(V 0.12.4) NPM(V 2.10.1) socket.io(V 1.3.5)私が知っている

それらのほとんどは本当に時代遅れです!私はiisnodeで現在のバージョンをテストする時間がなかった。

答えて

0

ユーザーはどのように削除されますか?正しく実行されていないと、メモリリークが発生する可能性があります。

ノードプロセスのプロファイルを作成し、どの値が保持されているかを確認することをお勧めします。これは、メモリリークの原因を示します。あなたはここでそれを行う方法についてもっと読むことができます:http://www.alexkras.com/simple-guide-to-finding-a-javascript-memory-leak-in-node-js/

+0

あなたの返信のための最初のおかげで!上記の例でわかるように、私は切断時に削除しています - オブジェクトはconn.idのフィルタ関数で減らされます 後であなたのサイトを見ていきます。 – webprogrammer

関連する問題